FGC问题排查

问题及原因分类

FGC问题分类

目前遇到的FGC问题主要分为两大类:

  1. FGC频繁(频率高);
  2. 停顿时间长(FGC持续时间长);

FGC原因分类

引发FGC问题的原因也主要分为两大类:

  1. JVM参数设置不合理;
  2. 程序Bug;

FGC频繁排查

JVM参数不合理

Young与Old比例不合理

  1. Old空间占比过小;

Eden与Survivor比例不合理

  1. Eden过小(晋升速率提高);
  2. Survivor过小(空间溢出);

晋升阈值不合理

  1. -XX:MaxTenuringThreshold=N过小(晋升速率提高);

CMS参数不合理

  1. CMS触发时机过早(-XX:CMSInitiatingOccupancyFraction=N过小);
  2. 空间碎片太多(开启碎片整理UseCMSCompactAtFullCollection,设置合理整理周期CMSFullGCsBeforeCompaction);
  3. FGC前没有触发YGC(开启-XX:+CMSScavengeBeforeRemark);

程序Bug

  1. 存在内存泄露(最终导致OOM);
  2. 存在大对象;

FGC持续时间长

JVM参数不合理

Old区过大

CMS参数不合理

  1. CMS触发时机太晚,导致“concurrent mode failure”;
  2. 空间碎片整理周期过短(调大CMSFullGCsBeforeCompaction);

参考:

  1. https://www.cnblogs.com/onmyway20xx/p/6605324.html;
  2. https://www.jianshu.com/p/2304f0ba412d

你可能感兴趣的:(JVM,常见问题排查,面试系列)