4

私のアプリケーション (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...
4

1 に答える 1

1

合計 CPU 時間または合計ユーザー時間は、スレッドの経過時間に関する情報を提供しません。スレッドエイジの最小値はこの値としか言いようがありません。

Mchr3k - Java Thread Dump AnalyzerまたはSamuraiなどのスレッド ダンプ アナライザーの使用を検討できます。

于 2013-04-04T10:31:39.697 に答える