是否可以使用线程转储找到线程的创建时间?
Is it possible to find the creation time of a thread using thread dump?
我使用 jmap -dump:format=b,file=<file.dump> <PID>
命令生成 JVM 实例的线程转储。我只想知道是否可以使用生成的线程转储在 JVM 实例中找到创建线程 运行 的时间。
这是一个堆转储,而不是线程转储。堆转储中没有关于线程创建时间的信息。但是,您可以从线程转储中找到它,如下所述。
使用jstack <PID>
转储线程
找到 nid
个您感兴趣的话题:
"Thread-7" #30 daemon prio=5 os_prio=0 tid=0x00002aaac9688800 nid=0x6945 runnable [0x00000000429c5000]
^^^^^^
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPoll.epollWait(Native Method)
at sun.nio.ch.EPollPort$EventHandlerTask.poll(EPollPort.java:194)
at sun.nio.ch.EPollPort$EventHandlerTask.run(EPollPort.java:268)
at java.lang.Thread.run(Thread.java:745)
转换为十进制:TID = 0x6945 = 26949
使用ps -Lo tid,lstart <PID> | grep <TID>
获取开始时间
26949 Tue May 30 19:16:29 2017
我使用 jmap -dump:format=b,file=<file.dump> <PID>
命令生成 JVM 实例的线程转储。我只想知道是否可以使用生成的线程转储在 JVM 实例中找到创建线程 运行 的时间。
这是一个堆转储,而不是线程转储。堆转储中没有关于线程创建时间的信息。但是,您可以从线程转储中找到它,如下所述。
使用
jstack <PID>
转储线程
找到
nid
个您感兴趣的话题:"Thread-7" #30 daemon prio=5 os_prio=0 tid=0x00002aaac9688800 nid=0x6945 runnable [0x00000000429c5000] ^^^^^^ java.lang.Thread.State: RUNNABLE at sun.nio.ch.EPoll.epollWait(Native Method) at sun.nio.ch.EPollPort$EventHandlerTask.poll(EPollPort.java:194) at sun.nio.ch.EPollPort$EventHandlerTask.run(EPollPort.java:268) at java.lang.Thread.run(Thread.java:745)
转换为十进制:TID = 0x6945 = 26949
使用
获取开始时间ps -Lo tid,lstart <PID> | grep <TID>
26949 Tue May 30 19:16:29 2017