我正在检查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...
答案 0 :(得分:1)
总CPU时间或总用户时间不会提供有关线程年龄的任何信息。它只能说线程年龄至少是这个值。
您可以考虑使用线索转储分析器,例如Mchr3k - Java Thread Dump Analyser或Samurai