豫ICP备17040950号-2

线上服务CPU100%问题快速定位

文章目录
  1. 1. 1、定位CPU高的进程
  2. 2. 2、定位最耗CPU的线程
  3. 3. 3、获取线程的十六进制码
  4. 4. 4、查看堆栈,找到线程在干嘛
  5. 5. 5、定位具体代码位置

一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环。

如果你嫌麻烦,我也强烈推荐阿里开源的问题定位神器 arthas 来定位问题。

简单步骤:

1、定位CPU高的进程

首先利用 top -c 将系统资源使用情况实时显示出来 (-c 参数可以完整显示命令)。

接着输入大写 P 将应用按照 CPU 使用率排序,第一个就是使用率最高的程序。

通过ps aux | grep PID命令,可以进一步确定是哪个进程出现了问题。

2、定位最耗CPU的线程

常规操作第二步自然是得知道这个应用中最耗 CPU 的线程到底再干嘛。

利用 top -Hp pid 然后输入 P 依然可以按照 CPU 使用率将线程排序。

ps -mp 22143 -o THREAD,tid,time|sort -k1 -nr|head -15

找到最耗时的线程

3、获取线程的十六进制码

将需要的线程ID转换16进制格式,printf "%x\n" tid

4、查看堆栈,找到线程在干嘛

追踪线程内部,查看load过高原因。

通过命令:jstack 25245 >>/usr/log.txt文件,将线程堆里面的信息全部保存下来

直接打印线程的堆栈信息:jstack pid |grep tid -A 30

5、定位具体代码位置

找到问题,分析代码