通常这个需要结合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,问题解决