为什么连接没有超时?

时间:2012-08-01 13:46:07

标签: java jdbc websphere connection-pooling jtds

使用SQLServer 2008数据库在Websphere Application Server 7上运行我的应用程序。当SQLServer为100%时,每个连接都挂起并填满连接池。这导致每个线程也挂起。 10分钟后,日志填满了这个:

00000042 ThreadMonitor W   WSVR0605W: Thread "WebContainer : 11" (00000049) has been active for 742352 milliseconds and may be hung.  There is/are 14 thread(s) in total in the server that may be hung.

连接池使用JTDS,超时设置为300秒。

我会推测,300秒后,每个连接都会抛出一个异常,然后让所有线程都挂起来?

2 个答案:

答案 0 :(得分:2)

为什么连接会在300秒后抛出异常?如果连接对象正在使用中,它将继续存活。

还要指定您所指的确切超时属性?

答案 1 :(得分:2)

以下是Connection Timeout的定义:

  

此值指示连接请求的秒数   等待空闲池中没有可用的连接而没有   可以创建新连接。这通常是因为   特定连接池中的最大连接值   已经到达。

     

例如,如果“连接超时”设置为300,则为最大值   连接数都在使用中,池管理器等待300   物理连接可用的秒数。如果是物理的   池管理器在此时间内无法连接   启动ConnectionWaitTimeout异常。

所以,它不会让'所有线程都挂起',它只会在300秒后告诉你池中没有空闲连接,所以它不能给你一个。

管理事务可以保持活动状态的时间的参数称为transaction timeout,之后事务被标记为回滚。但即使这个超时也没有取消使用该连接的线程,它只将其标记为仅回滚。为了释放连接,您必须使用第三方工具(ITCAM可以取消服务器中的任何线程),或者终止/删除数据库端的连接。