CPU 100%之后,怎么定位问题
1、先通过top命令查找出占cpu比较大的进程
2、查找出相应的pid,然后通过top -Hp pid 查找出相应的线程占用
4、将占用较大的进程转成16进制,查找出刚刚下载的文件该关键字
5、jstack pid | grep a33 -A 20
pid是进程ID
其中a33为占用线程较大的cpu 的pid 转换而成的16进制数据
先通过top命令查找出占cpu比较大的进程,找到最耗CPU的进程
top
查找出相应的pid,然后通过top -Hp pid 查找出相应的线程占用
根据上面图片所示,发现占用最大的进程ID是2601
top -Hp pid
也可以使用ps的命令
ps -mp ${进程的PID} -o THREAD,tid,time
运行以上命令后再键入P(大写p),线程会按照CPU使用率排序,如下图:
查看堆栈信息,定位线程的什么操作消耗了大量CPU,定位对应代码
堆栈里,线程id是用16进制表示的,所以需要将线程PID转化为16进制:
printf "%x\n" 2611
输出:
a33
打印堆栈信息
打印进程堆栈信息(注意2601是进程的PID),通过线程id,过滤得到线程堆栈:
jstack 2601 | grep a33 -A 20
其中2601 为进程ID,不要写成线程ID