Thread Dump 是排查 JVM 性能問題的「X 光片」。本文規範獲取、轉換、分析全流程,聚焦高 CPU 與死鎖兩大高頻場景。
ps aux | grep java | grep -v grep 或 jps -l。kill -3 <PID>(輸出到 stdout/控制台/日志文件)。jstack -l <PID> > threaddump.txt。Thread.getAllStackTraces() 寫入文件。"http-nio-8080-exec-10" #27 daemon prio=5 os_prio=0 tid=0x00007f... nid=0x1234 runnable [0x00007f...]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
- locked <0x000000076abcd123> (a org.apache.tomcat.util.net.NioChannel)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
top -H -p <PID> 中的 PID 列(十進制需轉換)。top -H -p <PID> 找佔 CPU 前幾的線程 PID(十進制)。printf "%x\n" <PID> 得到 nid。BLOCKED 且 waiting on 指向同一鎖地址的線程組,構建等待圖,找環。thread -b 直接顯示阻塞鏈。Thread Dump 分析核心是「PID→nid→堆疊→代碼」。建立標準化排查單,配合 top/jstack/Arthas,將定位時間從小時級壓縮到分鐘級。