jvm -XX:MetaspaceSize 元空间设置过小引发Full GC的优化
问题:
线上在维护的一个项目,在每次项目发布启动的时都会触发一次Full GC 。
排查:
1:结合GC日志查看发生成Full GC 都是项目刚启动就会发生一次垃圾整理回收的过程如下图:
2:结合监控系统查看指标发现MeataData使用量如下图:
检查JVM参数设置发现参数设置为:
-XX:MetaspaceSize=96m, -XX:MaxMetaspaceSize=192m:这个代表元空间初始值为:96m,最大可占用192m,
结合监控系统的指标:系统运行稳定的情况下MeataData的值在130m左右。
问题引起原因:如果元空间使用量一旦达到或者超过-XX:MetaspaceSize=96m初始值,就会进行扩容,扩容时会引起Full GC。
解决问题:
调整jvm参数为:-XX:MetaspaceSize=192m, -XX:MaxMetaspaceSize=192m
验证:
调整参数后重新发布项目,发布后,Gc日志情况如下图:
通过一段时间的监控问题得到解决。