簡體   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