Java线程转储
Java线程转储非常有助于分析应用程序中的问题、瓶颈和死锁情况。
方式一
在命令行中输入jvisualvm
或运行JDK bin目录下的jvisualvm.exe
打开Java VisualVM,右键正在运行的进程,选择线程 Dump
:
即可在右侧[threaddump]
页签中看到类似如下的转储结果:
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.45-b02 mixed mode):
"Worker-33" #732 prio=5 os_prio=0 tid=0x0000000016a7c000 nid=0x3760 in Object.wait() [0x000000003500f000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:188)
- locked <0x00000000c0d87c18> (a org.eclipse.core.internal.jobs.WorkerPool)
at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:220)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:52)
Locked ownable synchronizers:
- None
方式二
在命令行下使用jstack命令,用法如下:
jstack 10532 >> mydump.tdump
方式三
在命令行下使用jcmd命令,用法如下:
jcmd 10532 Thread.print >> mydump.tdump