在 Ubuntu 上排查 Java 线程问题(卡死、死锁、CPU 高、线程暴涨等),可以按下面步骤来,从“先看现象”到“深入线程栈”。
jps -l
或
ps -ef | grep java
拿到 PID(如 12345)
top -H -p 12345
printf "%x\n" TID
jstack 12345 > thread.txt
或
jstack -l 12345
分析内容:
java.lang.Thread.State
Found one Java-level deadlock
top -H -p 12345
假设 TID = 12456
printf "%x\n" 12456
# 输出 30a8
在 thread.txt 中搜索:
nid=0x30a8
"Thread-1" #12 prio=5 os_prio=0 tid=0x00007f... nid=0x30a8 waiting for monitor entry
cat /proc/12345/status | grep Threads
new Thread()curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
常用命令:
thread
thread -n 3 # CPU 最高的 3 个线程
thread -b # 阻塞线程
dashboard
✅ CPU 高
→ top -H + jstack
✅ 卡死
→ jstack 看 BLOCKED / WAITING
✅ 死锁
→ jstack -l
✅ 线程多
→ 看线程池 / 创建点
你可以直接告诉我:
我可以帮你 精确分析线程栈。