私のアプリケーション (JBoss 4.2.3 にデプロイされた) の一部がデータベース クエリのブロックによりロックされたときの Java スレッド ダンプを調べています。すべてがさまざまなクエリを実行している 6 つのスレッドがあり、これが最初の原因の候補になるため、どれが最初に実行されたかを特定したいと思います。
各スレッドの合計 CPU 時間とユーザー時間を比較し、時間の最も長いスレッドを最も古い (最初に実行した) スレッドとして扱うことはできますか? または、異なるスレッドに異なる時間が割り当てられる可能性がありますか?
例(簡単な例)
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...