Java线程Dump分析(TDA-Thread Dump Analyzer)

发布时间 2023-12-08 00:35:48作者: cac2020

一、如何获取线程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