使用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秒后,每个连接都会抛出一个异常,然后让所有线程都挂起来?
答案 0 :(得分:2)
为什么连接会在300秒后抛出异常?如果连接对象正在使用中,它将继续存活。
还要指定您所指的确切超时属性?
答案 1 :(得分:2)
以下是Connection Timeout的定义:
此值指示连接请求的秒数 等待空闲池中没有可用的连接而没有 可以创建新连接。这通常是因为 特定连接池中的最大连接值 已经到达。
例如,如果“连接超时”设置为300,则为最大值 连接数都在使用中,池管理器等待300 物理连接可用的秒数。如果是物理的 池管理器在此时间内无法连接 启动ConnectionWaitTimeout异常。
所以,它不会让'所有线程都挂起',它只会在300秒后告诉你池中没有空闲连接,所以它不能给你一个。
管理事务可以保持活动状态的时间的参数称为transaction timeout,之后事务被标记为回滚。但即使这个超时也没有取消使用该连接的线程,它只将其标记为仅回滚。为了释放连接,您必须使用第三方工具(ITCAM可以取消服务器中的任何线程),或者终止/删除数据库端的连接。