是否可以使用线程转储来查找线程的创建时间?

问题描述:

我使用jmap -dump:format=b,file=<file.dump> <PID>命令来生成JVM实例的线程转储。我只想知道是否可以使用生成的线程转储找到在JVM实例中运行的线程的创建时间。是否可以使用线程转储来查找线程的创建时间?

这是一个堆转储,而不是线程转储。在堆转储中没有关于线程创建时间的信息。但是,您可以从线程转储中找到它,如下所述。使用jstack <PID>

  • 查找线程的nid

    1. 转储线程兴趣:

      "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) 
      
    2. 将其转换为十进制:TID = 0x6945 = 26949

    3. 获取开始时间使用ps -Lo tid,lstart <PID> | grep <TID>

      26949 Tue May 30 19:16:29 2017