繁体   English   中英

具有大量匿名线程的Jboss 4.2.3应用程序

[英]Jboss 4.2.3 Application with huge number of anonymous Threads

我们维护一个旧版(jboss 4.2.3,ejb 3,jsp,jdk 1.6.45 64b)应用程序。

该应用程序大量使用数据库,并响应

  • 用户Http请求
  • Web服务请求
  • 某些CORBA连接
  • 一些外部JSM调用
  • 一些MDB内部流程

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个线程

  • 有时它会在几秒钟内增长到4 k,然后在几分钟内缓慢下降
  • 有时它最多可以增长到25 k线程,并且要花几个小时才能减少线程,并且应用程序变得无响应(需要重新启动)

线程转储显示所有这些线程都是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM