04_JVM线上故障排查
4/29/2021 jvm
[toc]
# 一、相关排查命令
参考:线上问题排查命令----JVM 篇 (opens new window)
# 二、排查过程
参考:
# 1.CPU 飚高
(1) 使用 top
命令查看系统 CPU 的占用情况,找到 CPU 占用最高的进程,并记住进程 ID
top
1
(2) 使用top -Hp [PID]
查看该进程的各个线程运行情况,找到 CPU 占用最高的线程, 并记住线程 ID
top -Hp [PID]
1
(3) 使用 JDK 提供的 jstack 工具 dump 线程堆栈信息到指定文件中
jstack -l [PID] >jstack.log
1
(4) 由于刚刚的线程 ID 是十进制的,而堆栈信息中的线程 ID 是 16 进制的,因此我们需要将 10 进制的转换成 16 进制的,并用这个线程 ID 在堆栈中查找。使用 printf "%x\n" [十进制数字]
,可以将 10 进制转换成 16 进制。
printf "%x\n" [十进制数字]
1
(5) 通过刚刚转换的 16 进制数字从堆栈信息里找到对应的线程堆栈,就可以从该堆栈中看出端倪。
(6)分析 dump,可使用 dump 文件的可视化工具进行分析,工具有: MAT,Jprofile,jvisualvm