[英]Jboss 4.2.3 Application with huge number of anonymous Threads
我们维护一个旧版(jboss 4.2.3,ejb 3,jsp,jdk 1.6.45 64b)应用程序。
该应用程序大量使用数据库,并响应
Http连接池是标准的(tomcat 5.5具有250个连接),数据库池的连接数已提高到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/property-to-create-timer-threads-per-statement-or-connection-in-jdbc-driver
删除setQueryTimeout指令即可解决此问题。
HTH!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.