CPU 飙高问题排查
文章目录
1、查询哪个进程占用 CPU
2、进程哪个线程占用 CPU
3、查询线程的堆栈信息
前言
CPU 飙高时,基本就是三板斧就可以找到具体占用 CPU 的线程信息,这样,你就看到 CPU 这么高,是什么线程在捣乱了!
1、查询哪个进程占用 CPU
可以使用 Top 或者 top | grep 用户名
比如这里我们可以使用 top | grep deploy 查询当前用户 deploy 下面有哪些进程比较占用 CPU,如下图,可以发现进程 28284 比较占用 CPU
2、进程哪个线程占用 CPU
接着我们查看上述进程内是哪些线程在捣乱,使用命令 top -H -p PID
在这里我们使用 top -H -p 28284,结果如下图,我们发现是有几个线程相对占用比较高,比如 28389、28390 等(这里我们只是展示效果,不要在乎是否真的占用比较大)
3、查询线程的堆栈信息
在这里我们要分两步
1、将 tid 转换为 16 进制的数字:printf “%x\n” tid
2、 查询线程信息:jstack 28284 | grep 6ee5 -A 10
执行结果如下图,我们可以看到具体是我们的应用里的哪个线程占用 CPU 较高,比如这里就是一个叫 SimplePauseDetectorThread_1 的线程,下面就是根据具体线程业务分析了
评论