性能案例-JVM频繁full GC 问题(JVM参数优化)

说明:这个是两三年前的一个案例,刚刚新开发的服务,jdk版本为1.7


1、问题描述

某服务线程十几分钟就出现一次full GC现象,需要优化(其他4个服务也存在类似问题)

2、问题原因

jvm 永久带未配置(默认值过小)

3、测试过程

以xx_core_service-1.0.0.jar线程为例,运行过程中出现full GC现象,需要优化

性能案例-JVM频繁full GC 问题(JVM参数优化)_第1张图片

4、优化建议

调整JVM参数。当前情况,已以xxx_core_service-1.0.0.jar为例,在增加perm参数后( -Xmn96m -XX:PermSize=32m -XX:MaxPermSize=32m),验证测试通过。


5、验证结果

增加 -Xmn96m -XX:PermSize=32m -XX:MaxPermSize=32m" 后验证结果如下

(观察一个小时):

堆内存使用情况:本时间段内,未出现full GC情况

性能案例-JVM频繁full GC 问题(JVM参数优化)_第2张图片

Perm区内存使用情况如下

性能案例-JVM频繁full GC 问题(JVM参数优化)_第3张图片


触发JVM进行Full GC的情况(本案例是第3种情况)

1、System.gc()方法的调用

2、老年代空间不足

3、永生区空间不足

Permanet Generation中存放的为一些class的信息、常量、静态变量等数据,当系统中要加载的类、反射的类和调用的方法较多时,Permanet Generation可能会被占满,为避免Perm Gen占满造成Full GC现象,可采用的方法为增大Perm Gen空间或转为使用CMS GC。

4、CMS GC时出现promotion failed和concurrent mode failure

5、统计得到的Minor GC晋升到旧生代的平均大小大于老年代的剩余空间

6、堆中分配很大的对象



https://zhuanlan.zhihu.com/p/30234715

你可能感兴趣的:(jvm)