欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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
相关标签: Java基础