通常这个需要结合Linux命令和LDK的工具一起使用来排查。
1.先用top命令找出CPU占比最高的程序
2.使用ps -ef或者jps进一步定位,得知是一个怎么样的一个后台程序造成CPU负载过高
3.定位到具体线程或者代码
3.1 ps -mp 进程号 -o THREAD,tid,time

上图中定位到线程5102cpu占用率较高。因此知道线程id为5102
命令参数解析:
- -m 显示所有的线程
- -p pid进程使用CPU的时间
- -o 该参数后是用户自定义格式
4.将需要的线程ID转换为16进制格式(英文小写格式)
用以下命令转换:
printf "%x\n" 线程ID
5102转后为 13ee
不会的话,可以用计算器去转换。
5.jstack 进程ID | grep tid(16进制线程ID小写英文) -A60

这样,就定位到到底是哪一行代码,导致了CPU过高了。
ok,问题解决
本文详细介绍了一套在Linux环境下排查高CPU负载的步骤。首先使用top命令找到CPU占用率最高的程序,接着通过ps-ef或jps进一步定位具体后台程序。然后利用ps-mp获取线程详情,确定高负载线程,再将其ID转换为16进制,最后通过jstack命令精准定位至引发高负载的具体代码行。
1772

被折叠的 条评论
为什么被折叠?



