4

我正在检查 Java 线程转储,从我的应用程序的一部分(部署在 JBoss 4.2.3 上)由于阻塞数据库查询而锁定时开始。有 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 AnalyzerSamurai

于 2013-04-04T10:31:39.697 回答