Linux 服务器 CPU 负载过高的定位分析
前言
本文将以 Java 应用程序为例子,介绍如何在 Linux 服务器上,快速定位分析 CPU 负载(占用率)过高的问题,即通过多个命令精确定位到存在问题的 Java 代码。
第一步
使用
top
命令找出 CPU 占用率最高的进程,记录下进程 ID
1 | top |
top
命令的输出结果:
第二步
使用
ps
命令进一步找出 CPU 占用率最高的线程,记录下线程 ID
1 | # 列出进程 6113 的所有线程,并显示线程 ID 和线程已使用的 CPU 时间 |
ps
命令的参数解释:
1 | -T:显示所有的线程 |
ps
命令的输出结果:
第三步
将找到的线程 ID 转换为十六进制格式(英文小写),比如
17e2
1 | printf "%x\n" 6114 |
第四步
使用
jstack
命令进一步精确定位到错误代码
1 | jstack 6113 | grep 17e2 -A 60 |
jstack
命令的参数解释:
1 | jstack 进程ID | grep 线程ID(十六进制格式) -A 输出行数 |
jstack
命令的输出结果: