目录
1- 引言:
- CPU 飙高指的是项目在运行过程中导致服务器的 CPU 内存占用较高。
2- ⭐核心:
2-1 排查方案与思路
- 使用 top 命令查看占用 CPU 的情况
top
- 通过 top 命令查看后,可以查看是哪一个进程占用 CPU 较高,上图所示为 2266
- 找到进程之后,目的是找到 java 项目中的哪一行代码导致 CPU 飙高的问题,由于代码的运行都是在线程中运行,
- 使用 ps 的 Linux 指令
ps -H -eo pid,tid,%cpu | grep 2266
- 打印出了所有 2266 进程中的线程,可以看到其中 2276 占用 CPU 特别高
- 使用 一下 jstack + 进程 id
jstack 2266
- 此时打印出所有线程的信息,可需要筛选出 上述 CPU 占用高的线程,
2276
- 同时
jstack
打印的信息中的线程 id 都是十六进制,因此需要通过 Linux 命令将十进制转为 十六进制
- 使用 Linux 将十进制线程 id 转为 十六进制
- 通过 十六进制 的线程 id 找到对应的信息,定位到代码行
printf "%x\n" 2276