一、如何获取线程Dump文件
visualVM、idea等可视化工具也可以获取线程Dump,但是生产环境一般还是用命令来获取,生成Dump文件后从服务器上取下来,使用工具来分析。
#命令格式:jstack -l PID > pid.tdump -l打印关于锁的其他信息,比如拥有的java.util.concurrent ownable同步器的列表。 [wjy@node101 ~]# jps 16108 Jps 12203 math-game.jar [wjy@node101 ~]# jstack -l 12203 > 12203.tdump [wjy@node101 ~]# sz 12203.tdump *B00000000000000
二、线程Dump日志解读
2023-12-07 23:23:23 Full thread dump OpenJDK 64-Bit Server VM (25.382-b05 mixed mode): "XNIO-1 task-10" #415 prio=5 os_prio=0 tid=0x00007f3eb4214800 nid=0x38d7 waiting on condition [0x00007f3e63fbc000] java.lang.Thread.State: TIMED_WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x00000006cd39ae40> (a org.jboss.threads.EnhancedQueueExecutor) at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215) at org.jboss.threads.EnhancedQueueExecutor$PoolThreadNode.park(EnhancedQueueExecutor.java:2234) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1493) at org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1282) at java.lang.Thread.run(Thread.java:750) Locked ownable synchronizers: - None
第1行:时间表示Dump提取时间;
第2行:表示JVM版本、模式;
第4行:
"XNIO-1 task-10":代表线程的名称。在实际开发中,最好取一个和业务相关的、见名知意的名字便于排查问题。
#415 :
"prio=5":表示当前java线程的优先级。
"os_prio=0":表示操作系统级别的优先级。
"tid=0x00007f3eb4214800":表示当前java线程十六进制id。
"nid=0x38d7":表示操作系统映射的线程十六进制id。
"waiting on condition":表示线程动作。
"[0x00007f3e63fbc000]":表示线程栈的起始地址。
第5行:线程状态
TIMED_WAITING:线程状态
(parking)
参考:
https://blog.csdn.net/weixin_37862824/article/details/109147198
https://blog.csdn.net/adaivskean/article/details/85782236
https://www.cnblogs.com/zhengyun_ustc/archive/2013/01/06/dumpanalysis.html