2013-11-04 54 views
0

我使用jstack獲得具有最高cpu利用率的PID線程轉儲。它指向帶有0x4974的線程。100%cpu利用率需要幫助分析線程轉儲

「VM線程」 PRIO = 10 TID = 0x00007ffc60068800 NID = 0x4974可運行 「VM 週期性任務線程」 PRIO = 10 TID = 0x00007ffc60098000 NID = 0x497b 條件JNI等待全局引用:1182

由於它沒有線程的狀態和正在執行的代碼,與我在網絡上看到的示例線程轉儲不同,所以我在分析過程中遇到了問題。是否有任何免費軟件,最好在線,可以分析.txt線程轉儲文件?

感謝那些回覆。好的,我可以學習如何使用武士,tda和ibm線程轉儲工具。看來問題在於正在創建的線程數量,等待監視的線程,鎖定和阻塞。但我想知道你們是否有額外的投入。這是我從TDA有:

當它以100%的CPU利用率

Overall Thread Count 1001 
Overall Monitor Count 644 
Number of threads waiting for a monitor 50 
Number of threads locking a monitor 636 
Number of threads sleeping on a monitor 0 
Number of deadlocks 0 
Number of Monitors without locking threads 0 

後,我重新

所有線程的
Overall Thread Count 32 
Overall Monitor Count 13 
Number of threads waiting for a monitor 0 
Number of threads locking a monitor 13 
Number of threads sleeping on a monitor 13 
Number of deadlocks 0 
Number of Monitors without locking threads 0 

40%是在監視器上睡覺。

這可能表示他們正在等待一些超載或不可用的外部資源(例如數據庫)或者正在等待執行某些操作(空閒線程)。您應該使用不包含所有空閒線程的篩選器檢查睡眠線程。

我們只有約60個客戶。

我在cpu利用率爲100%並重置後上傳了線程轉儲。我還包括我使用的工具(武士,tda和ibm線程和顯示器轉儲分析器) http://www.mediafire.com/?901mduvodm97d8v,x72cdixp8fltabu,fhfw4e50c7fzu4t,1oq2npaxmtxz0dq,i0u997fhvxfagd3,cdewe4de6x3rhe4,w2ndwqw2ekwixkd,qsbst5ow6f59p75,9fx8w8qpfdhjmyx,levpqppb3ouh71q

+0

我會使用visualvm加載線程轉儲並分析它。 –

+0

您可以發佈整個線程轉儲嗎?這將提供更多的線索,因爲造成真正問題的原因。 – CuriousMind

+0

如果我發佈整個線程轉儲,它真的會好嗎?它相當長。 – user2939830

回答

0

轉至IBM Thread and Monitor Dump Analyzer for Java從IBM下載該工具。但出於您的目的,您可能能夠自己分析線程轉儲,並將您在jstack中發現的ID與線程堆棧跟蹤映射到線程轉儲中。要獲得線程轉儲:

on Linux: kill -3 pid 
on Windows: Ctrl-Break (not Ctrl-C) 

之後,您可以從命令窗口或標準輸出複製線程轉儲。

1

這些內部線程沒有Java線程堆棧,因此沒有常規工具可以提供幫助。如果這些消耗過多的CPU,我會首先懷疑您使用的Java版本中存在一個錯誤。我會嘗試使用Java 6更新45或Java 7更新45.

要診斷此問題,您需要本機堆棧轉儲和對JVM內部的很好理解。