CPU100%快速定位
文章目录
做后端开发同学,或多或少都遇到过CPU负载高的问题
如何定位是哪个服务进程导致CPU过载,哪个线程导致CPU过载,哪段代码导致CPU过载?
找到最耗CPU的进程
top
方法:
- 执行
top -c
,显示进程运行信息列表 - 键入
P
(大写p),进程按照CPU使用率排序
找到最耗CPU的线程
top
方法:
top -Hp 10681
,显示一个进程的线程运行信息列表- 键入
P
(大写p),线程按照CPU使用率排序
将线程PID转化为16进制
printf
方法:printf “0x%x\n” 10681
10681对应的16进制是0x29b9n,当然,这一步可以用计算器。
之所以要转化为16进制,是因为堆栈里,线程id是用16进制表示的。
查看堆栈,找到线程在干嘛
pstack/jstack/grep
方法:jstack 10681 | grep ‘0x29b9n’ -C5 --color
- 打印进程堆栈
- 通过线程id,过滤得到线程堆栈
工具推荐
useful-scripts
文章作者 静晓晨曦
上次更新 2018-12-03