jvm中CPU过高,频繁Full GC如何排查呢?

书欣 Java面经 发布时间:2022-08-03 16:13:49 阅读数:19183 1
今天服务器频繁FullGC,我们该如何排查呢?下文笔者将一一道来,如下所示

查看进程运行情况

# top <pid>

查看进程对应线程情况

# top -Hp <pid>
 

查看占用CPU过高的线程

在jsatck命令展示的结果中
线程id都转换成了十六进制形式。可以用如下命令查看转换结果:

# printf "%x\n" <pid>

jstack定位CPU占用线程

80代表查看80行日志
# jstack <pid> | grep <tid 16进制> -A80
发现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:垃圾回收消耗总时间 

解决频繁fullGC问题的方法

经排查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
 
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaMianJing/202208/16595144674131.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者