时间:2020-12-27 13:28:28
Java CPU占用高问题定位分析¶
通过命令定位CPU占用过高代码。
-
第一步定位到进程ID。使用
top命令,找到进程ID为13483。 -
查看进程详细信息。使用
jps或者ps -ef | grep java | grep -v grep```
jps¶
[root@qyi-599a961908983 ~]# jps -v 13483 halo-1.3.2.jar -XX:+UseG1GC -XX:+PrintGC
ps¶
[root@qyi-599a961908983 ~]# ps -ef | grep java | grep -v grep root 13483 1 0 Nov11 pts/3 04:15:33 java -jar -XX:+UseG1GC -XX:+PrintGC /home/root/software/halo/halo-1.3.2.jar ```
-
定位CPU线程,使用
top -H -p 13483命令或者ps H -eo pid,tid,%cpu | grep 13483, 定位到线程13486。[root@qyi-599a961908983 ~]#top -H -p 13483 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 13486 root 20 0 2453368 391740 5516 S 0.3 39.0 25:17.63 java 13483 root 20 0 2453368 391740 5516 S 0.0 39.0 0:00.00 java 13484 root 20 0 2453368 391740 5516 S 0.0 39.0 0:21.88 java 13485 root 20 0 2453368 391740 5516 S 0.0 39.0 2:35.75 java 13487 root 20 0 2453368 391740 5516 S 0.0 39.0 0:01.12 java 13488 root 20 0 2453368 391740 5516 S 0.0 39.0 0:00.34 java 13489 root 20 0 2453368 391740 5516 S 0.0 39.0 0:13.44 java -
转换进程ID为16进制。
printf '%x\n' 13486,得到结果34ae。 -
定位到对应代码调用栈。
jstack -l 13483 | grep -A 20 "34ae"。