[英]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.