GC频繁优化
压力大时GC 12秒一次,需要进行优化。
优化前
- GC约2分钟一次
- 内存到达1.18g,约60%时触发了minorGc
- jvm参数
-Xms2g -Xmx2g -Xmn768m -XX:MaxTenuringThreshold=13
优化一
- 观察到使用的内存其实占用率极低,可以适当增加年轻代的大小。
-Xmn1g -XX:+PrintGCDetails -Xloggc:…/logs/gc.log
GC间隔时间稍有增大。
- 观察GC日志
出现间隔时间比较短的Full GC。原因是元空间扩容。
- 正常的Minor GC 时间间隔稳定后大约2分钟10秒,有一定提升。
优化二
- 增大元空间
-XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M - 观察GC日志
- 观察到元空间导致的Full GC已经消失,正常的Minor GC稳定后大约间隔2分钟27秒。运行两小时后发现Minor GC的间隔大约是3分钟。
测试
开始对系统的监视器施压,原先优化前的Minor GC大约是12秒。
优化完成后,Minor GC大约是80秒一次。可以接受的程度。
小结
- 年轻代原先三分之一的大小有点小,可以增加到二分之一。
- 元空间的大小一般定在256M,避免元空间引起的Full GC。