1

在带有 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 秒后,每个连接都会引发异常,然后会使所有线程都挂起?

4

2 回答 2

2

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

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

于 2012-08-02T00:03:27.587 回答
2

这是Connection Timeout的定义:

该值表示空闲池中没有可用连接且无法创建新连接时连接请求等待的秒数。这通常是因为已达到特定连接池中连接的最大值。

例如,如果连接超时设置为 300,并且最大连接数都在使用中,则池管理器将等待 300 秒以使物理连接可用。如果在此时间内物理连接不可用,池管理器将启动 ConnectionWaitTimeout 异常。

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

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

于 2012-08-02T18:45:00.740 回答