我们维护一个旧版(jboss 4.2.3,ejb 3,jsp,jdk 1.6.45 64b)应用程序。
该应用程序大量使用数据库,并响应
Http连接池是标准的(具有250个连接的tomcat 5.5),数据库池的连接数已提高到300(而不是60个标准)。
jboss service.xml(定义了默认线程池)为
<mbean code="org.jboss.util.threadpool.BasicThreadPool"name="jboss.system:service=ThreadPool">
<attribute name="Name">JBoss System Threads</attribute>
<attribute name="ThreadGroupName">System Threads</attribute>
<attribute name="KeepAliveTime">60000</attribute>
<attribute name="MaximumPoolSize">10</attribute>
<attribute name="MaximumQueueSize">1000</attribute>
<attribute name="BlockingMode">run</attribute>
我们的一位客户在一天中的某个时段表现不佳。
生成了很多线程,这些线程与用户活动没有任何关系。
正常活动线程数为300/400个线程
线程转储显示所有这些线程都是RUNNABLE,但是没有堆栈跟踪(其他“正常”线程显示通常的堆栈跟踪)。
所有这些线程都被命名为“ Thread-xxxxxx ”,并且属于“ JBoss Pooled Threads ”
我们确定这些线程不是由应用程序创建的,但是我们找不到导致该线程生成的原因。
有任何想法吗 ?
解决 !问题与SQL SERVER Jdbc驱动程序有关,我们的代码在Statement上使用了setQueryTimeout指令,驱动程序中存在一个错误,导致该错误为每个查询创建一个线程来管理超时。
请参阅:https : //connect.microsoft.com/SQLServer/feedbackdetail/view/785983/jdbc-additional-thread-for-every-query-when-using-setquerytimeout
https://connect.microsoft.com/SQLServer/feedback / details / 669427 / jdbc驱动程序中每个语句或连接的创建计时器线程的属性
删除setQueryTimeout指令即可解决此问题。
呵呵!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句