本文共 3478 字,大约阅读时间需要 11 分钟。
生产环境cpu过高问题,排查虽然不易,但是是有一定的套路,可以加快问题定位从而排查的。
1.查看cpu占用高的进程
top
2. ps -ef或者jps进一步定位,得知是一个怎么样的一个后台程序
3.查看对应进程下,每个线程的运行情况
ps -mp pid -o THREAD,tid,time例如ps -mp 29556 -o THREAD,tid,timeps -mp 11823 -o THREAD,tid,time
4.将占用资源夺得线程threadpid:进制转换,2HEX
printf "%x\n" threadpid
5.查看对应线程存在的问题
jstack 进程ID | grep tid(16进制线程ID小写英文) -A60
package com.ray.cpu;public class cpuOccupy { public void cpuCircle() { int num = 0; long start = System.currentTimeMillis() / 1000; while (true) { num = num + 1; if (num == Integer.MAX_VALUE) { System.out.println("reset"); num = 0; } if ((System.currentTimeMillis() / 1000) - start > 1000) { return; } } } public static void main(String[] args) { new cpuOccupy().cpuCircle(); }}
关键点:打包jar包插件,以及指定主类4.0.0 com.ray.cpu occupied 1.0-SNAPSHOT maven-compiler-plugin 2.3.2 maven-assembly-plugin jar-with-dependencies com.ray.cpu.cpuOccupy make-assembly package single
# java -jar occupied-1.0-SNAPSHOT-jar-with-dependencies.jar
[root@cloudera ~]# ps -mp 13645 -o THREAD,tid,timeUSER %CPU PRI SCNT WCHAN USER SYSTEM TID TIMEroot 98.7 - - - - - - 00:00:36root 0.0 19 - futex_ - - 13645 00:00:00root 98.6 19 - - - - 13648 00:00:36root 0.0 19 - futex_ - - 13650 00:00:00root 0.0 19 - futex_ - - 13651 00:00:00root 0.0 19 - futex_ - - 13653 00:00:00root 0.0 19 - futex_ - - 13655 00:00:00root 0.0 19 - futex_ - - 13658 00:00:00root 0.0 19 - futex_ - - 13664 00:00:00root 0.0 19 - futex_ - - 13665 00:00:00root 0.0 19 - futex_ - - 13666 00:00:00root 0.0 19 - futex_ - - 13669 00:00:00root 0.0 19 - futex_ - - 13670 00:00:00root 0.0 19 - futex_ - - 13673 00:00:00root 0.0 19 - futex_ - - 13674 00:00:00root 0.0 19 - futex_ - - 13678 00:00:00root 0.0 19 - futex_ - - 13679 00:00:00root 0.0 19 - futex_ - - 13680 00:00:00root 0.0 19 - futex_ - - 13685 00:00:00root 0.0 19 - futex_ - - 13687 00:00:00root 0.0 19 - futex_ - - 13688 00:00:00
[root@cloudera ~]# printf "%x\n" 136483550
jstack 13645 | grep 3550 -A60
https://blog.csdn.net/jiankunking/article/details/79749836
https://blog.csdn.net/jiankunking/article/details/80297136