性能案例-JVM频繁full GC 问题(JVM参数优化)
说明:这个是两三年前的一个案例,刚刚新开发的服务,jdk版本为1.7
1、问题描述:
某服务线程十几分钟就出现一次full GC现象,需要优化(其他4个服务也存在类似问题)
2、问题原因:
jvm 永久带未配置(默认值过小)
3、测试过程:
以xx_core_service-1.0.0.jar线程为例,运行过程中出现full GC现象,需要优化
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情况
Perm区内存使用情况如下
触发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