文章目录
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 “%xn” tid
2、 查询线程信息:jstack 28284 | grep 6ee5 -A 10
执行结果如下图,我们可以看到具体是我们的应用里的哪个线程占用CPU较高,比如这里就是一个叫SimplePauseDetectorThread_1的线程,下面就是根据具体线程业务分析了
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。