是否可以在JVM中检索给定
java线程的开始时间?
我有一个线程转储,我正在查看一些有问题的线程,我想使用时间与应用程序日志中的特定操作相关联.
解决方法
是的,如果您在
Linux上运行Oracle JDK / OpenJDK,则可以.
想法是找到本机线程ID(TID),然后查看/ proc / JAVA_PID / task / TID伪文件的修改时间.
如果你有一个线程转储,那么这是微不足道的:本机线程id将由线程头打印.
例如,Java进程PID是2086.您键入
$jstack 2086
并使用以下感兴趣的线程获取堆栈跟踪:
"Thread-26" prio=10 tid=0x00007f96c80c2800 nid=0x86a waiting on condition [0x00007f96c0ff2000] java.lang.Thread.State: TIMED_WAITING (sleeping)
其中nid = 0x86a是本机线程ID. 0x86a = 2154,所以你想要探索过程2086的任务2154:
$ls -ld /proc/2086/task/2154 dr-xr-xr-x 6 user user 0 Mar 10 23:12 /proc/2086/task/2154 ^^^^^^^^^^^^ the thread start time