我正在檢查Java線程轉儲,從部分應用程序(部署在JBoss 4.2.3上)因鎖定數據庫查詢而鎖定。有6個線程正在執行各種查詢,我想確定哪個是第一個執行的,因爲這將成爲初始原因的候選人。識別java堆棧跟蹤中最早的線程
我可以比較每個線程上的總CPU時間和用戶時間,並將最長時間的線程視爲最早的(首次運行)?或者不同的線程可能被分配不同的時間量?
E.g(簡單的例子)
Thread ajp-0.0.0.0-8009-19 (Id = 21) RUNNABLE
Total CPU time 100000 ms, User time 100000 ms
stack here...
Thread ajp-0.0.0.0-8009-19 (Id = 200) RUNNABLE
Total CPU time 200000 ms, User time 200000 ms
stack here...
Thread ajp-0.0.0.0-8009-19 (Id = 2590) RUNNABLE
Total CPU time 300000 ms, User time 300000 ms < --- THIS THREAD MUST HAVE STARTED BEFORE OTHERS
stack here...
您可以考慮使用一個線程轉儲分析器如 http://mchr3k.github.com/javathreaddumpanalyser/ 或 HTTP:// yusuke.homeip.net/samurai/en/index.html – Kishore 2013-04-04 10:07:33
謝謝 - 但我不確定是否添加了我需要的信息(如果它在總CPU時間/總用戶時間中不存在) – 2013-04-04 10:11:07
總CPU時間或總用戶時間不會給你任何有關線程年齡的信息。它只能說最低線程的年齡就是這個值。 – Kishore 2013-04-04 10:21:00