如何在Websphere上解决StaleConnection问题

时间:2013-03-11 19:10:02

标签: db2 websphere spring-jdbc

数据库:db2,Application Server:websphere 8

我们有更新/检索数据库中的值的休息服务。该服务每天最多使用两次。因此,其余通话之间的时间间隔将近24小时。

对于每个第一个/第二个请求,它都会抛出staleConnection个异常。 第三次重试通过。

在下面链接中指定了所有内容。

How to handle stale connections?

http://pic.dhe.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.nd.multiplatform.doc/info/ae/ae/tdat_pretestconn.html

http://www.thejavacode.com/websphere-adapters-stale-connection-problem-t34.html

但仍然有staleConnection例外。我们正在使用Spring JDBC,因此我没有看到在使用后没有关闭连接的问题。另外,我在单个请求中编写了重试逻辑,以便在遇到连接异常时尝试获取有效连接三次。

第一次遇到staleconnection异常时,服务等待三秒并重试连接,但后续重试正在抛出

  

ObjectClosedException:DSRA9110E:连接已关闭。

我怀疑后续重试是否正在尝试打开现有陈旧连接。 如何解决这个问题?

如果我包含错误的标签,我道歉。

3 个答案:

答案 0 :(得分:2)

#1解决方案是:不要导致连接过时。 DB2驱动程序或服务器中有 nothing 导致这种情况发生。 99%的过时连接是由具有TCP超时的防火墙损坏引起的。修复防火墙产品的已用网络路由的超时设置。

#2解决方案是:

  • 根据您提供的链接设置预测试。确保您的SQL查询有效(例如SELECT current date FROM sysibm.sysdummy1
  • 在池设置中设置reap,unused和aging timeout以在一定时间后销毁未使用的连接。 (如果数量低于池的最低值,将立即建立新的)
  • 将清除策略设置为EntirePool。但请注意,这将意味着来自池的一个连接处的StaleConnectionException将强制WAS从池中删除所有内容并创建新连接以满足最小量要求。这可能会导致性能问题。

答案 1 :(得分:1)

我同意回答(user918176),只是想添加另一个解决问题的简单设置,为了完整性;将最小连接池大小设置为零。

StaleConnectionException通常在一段时间不活动后发生(如早上的第一次请求,午休后),在此期间某些网络设备终止底层TCP连接。

将最小池大小设置为零会导致在相当短的时间段之后丢弃所有旧连接(在unused timeout之后,默认情况下在上次使用连接后1800秒)。所以在不活动期后,池中没有简单的连接(否则会过时)。此解决方案导致最小配置更改和最小性能命中(仅在非活动时段之后的第一个请求等待重新初始化数据库连接而不是获得即用连接)。

答案 2 :(得分:0)

将最小连接池调整为0,默认值为1。