服务器CPU 占用率过高问题排查
查看进程运行情况
# top <pid>
查看进程对应线程情况
# top -Hp <pid>
查看占用CPU过高的线程
在jsatck
命令展示的结果中,线程id都转换成了十六进制形式。可以用如下命令查看转换结果:
# printf "%x\n" <pid>
jstack
定位CPU占用线程
60代表查看60行日志
# jstack <pid> | grep <tid 16进制> -A60
发现CPU过高的线程都是GC
查看Gc情况
可以先确定下gc是不是太频繁,使用命令来对gc分代变化情况进行观察,1000表示采样间隔(ms),1秒打印一次
# jstat -gccause <pid> 1000
经查看老年代满了,然后一秒两次GC。
ps:
S0C:第一个幸存区的大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC:年