CPU过高

 排查三板斧

一、top命令定位占用高CPU的进程

执行top命令,可以看到占用CPU高的进程,PID的为41843进程内存过高

如果只想查看指定进程的内存、CPU、负载情况可以用一下命令

top -p 41843

-P 表示查找指定进程

二、top定位指定进程41843里各个线程的执行情况

top -p 41843 -H

-H 表示查看线程情况


 此时看到 pid 为41892的线程CPU占用比较高

三、jstack定位问题代码

 首先要把线程PID转换成nid

printf 0x%x 41892

0xa3a4roo

其中0x%x的0x是固定字符串,%x是printf的十六进制的转换类型

然后使用jstack

jstack 41892 | grep a3a4

输出

"Thread" prio=10 tid=0x00007f950043e000 nid=0x54ee in test();

可以分析得到: 线程Thread下的wait()函数cpu使用率很高,然后就可以查看源代码中的test()函数:


附录

对top出来的各行的参数解读

第一行是任务队列信息

top - 14:06:34 up 537 days, 6 min,  6 users,  load average: 0.41, 0.45, 0.43


2)第二行为进程的信息


第三行为cpu信息


第四、五行为内存信息。

内容如下:



参考文章

https://www.jianshu.com/p/6d573e42310a

https://www.cxyzjd.com/article/hanchao5272/100702388

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容