Java服务检查cpu飙升、查看线程堆栈,排查死锁等问题解决方法

疯一样的男子
疯一样的男子
发布于 2025-08-04 / 12 阅读
0
0

Java服务检查cpu飙升、查看线程堆栈,排查死锁等问题解决方法

方法一:jstack命令,java自带排查工具

找进程

# 按 P 排序,找出占用 CPU 最多的 Java 进程 PID(假设是 12345),按Q退出
top 

找线程

ps -mp <pid>  -o THREAD,tid,time | sort -nr
# 比如 ps -mp 12345 -o THREAD,tid,time | sort -nr

线程TID转换成16进制

printf “%x\n" <tid>
# 比如 printf "%x\n" 6789,执行后输出例如 1a85,注意:不要有 0x 前缀,保持小写。

查看 Java 堆栈,定位对应线程

jstack pid | grep tid
# 比如 jstack 12345 | grep -A 30 1a85
# 怀疑死锁,可使用 jstack 自带的 Found one Java-level deadlock: 关键字

方案二:使用开源诊断工具 arthasa(阿尔萨斯)

https://arthas.aliyun.com/doc/


评论