GC频繁优化

压力大时GC 12秒一次,需要进行优化。

优化前

  • GC约2分钟一次
  • 内存到达1.18g,约60%时触发了minorGc

JVM GC频繁优化

  • jvm参数

    -Xms2g -Xmx2g -Xmn768m -XX:MaxTenuringThreshold=13

优化一

  • 观察到使用的内存其实占用率极低,可以适当增加年轻代的大小。

    -Xmn1g -XX:+PrintGCDetails -Xloggc:…/logs/gc.log

JVM GC频繁优化

GC间隔时间稍有增大。

  • 观察GC日志

JVM GC频繁优化

出现间隔时间比较短的Full GC。原因是元空间扩容。

  • 正常的Minor GC 时间间隔稳定后大约2分钟10秒,有一定提升。

优化二

  • 增大元空间

    -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M

  • 观察GC日志

JVM GC频繁优化

  • 观察到元空间导致的Full GC已经消失,正常的Minor GC稳定后大约间隔2分钟27秒。运行两小时后发现Minor GC的间隔大约是3分钟。

测试

开始对系统的监视器施压,原先优化前的Minor GC大约是12秒。

JVM GC频繁优化

优化完成后,Minor GC大约是80秒一次。可以接受的程度。

小结

  1. 年轻代原先三分之一的大小有点小,可以增加到二分之一。
  2. 元空间的大小一般定在256M,避免元空间引起的Full GC。

相关文章: