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

上次更新: 2021-06-11 22:12:01