java - 识别 Java 堆栈跟踪中最旧的线程

标签 java jboss stack-trace

我正在检查一个 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...

最佳答案

总 CPU 时间或总用户时间不会为您提供有关线程年龄的任何信息。只能说线程年龄最小就是这个值。

您可以考虑使用线程转储分析器,例如 Mchr3k - Java Thread Dump AnalyserSamurai

关于java - 识别 Java 堆栈跟踪中最旧的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15808167/

相关文章:

gcc - 使用 GCC 编译器的 ARM 核心堆栈回溯(当有 MSP 到 PSP 切换时)

java - OpenCV Java createFisherFace Ptr

java - 如何从混合整数和浮点列表中一行初始化 ArrayList<Double>?

java - 使用 Java 登录 Jboss 7.1.1 Final 管理控制台

java - JBoss AS 7 : Logging to remote host (logstash)

java - 在 Java 中伪造堆栈跟踪

c++ - 处理 POSIX 信号 : how to get stack trace without using backtrace_symbols?

java - 使用 Retrofit2 上传二进制文件大多数时候会因 ECONNRESET(连接被对等方重置)而失败

java - 查找由其他字符串的字符组成的最长子字符串

xhtml - JBoss编辑.WAR里面的文件