CPU过高Full GC次数过多问题的排查
程序员文章站
2022-05-06 21:15:23
...
服务器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:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
解决问题
经排查Tomcat永久区参数设置
-XX:PermSize 没有设置,jdk 1.6 GC每次使用74M,然后一直GC。
-XX:MaxPermSize=1024m
修改参数后,重启,问题解决:
-XX:PermSize=256m
-XX:MaxPermSize=1024m
说明:
–设置永久区的初始空间和最大空间
-XX:PermSize 设置持久代(perm gen)初始值,物理内存的1/64
-XX:MaxPermSize 设置持久代最大值,物理内存的1/4
上一篇: Spring框架(三)AOP
下一篇: python如何安装whl文件