GC压力判断依据三类信号:Young GC间隔短于1–2秒且Eden快速填满、Mixed GC每分钟超3次且老年代回收占比超20%、Young/Mixed GC停顿显著超标或并发标记耗时过长。

直接看GC日志里三类关键信号:Young GC频率、Mixed GC出现节奏、以及停顿时间分布。不是所有GC都代表压力大,但组合出现特定模式时,说明回收已开始吃紧。
看Young GC是否过于频繁
Young GC本该规律发生,但如果间隔持续短于1–2秒,尤其在业务低峰期也如此,说明对象分配速率过高或年轻代空间偏小。重点观察日志中连续两次GC的相对时间戳差值(如3600.456 → 3602.112,间隔仅1.6秒),再结合[Eden: X→0]后很快又填满,就是典型压力信号。
- 搭配-XX:+PrintTenuringDistribution,若Survivor区中高年龄(如age 15)对象大量堆积,说明晋升受阻,可能触发提前Mixed GC
- 若日志中频繁出现(to-space exhausted),表示Survivor空间不足,对象被迫直接晋升老年代,加速老年代填充
盯住Mixed GC的触发密度与范围
Mixed GC不是“偶尔来一下”,而是G1应对老年代压力的主动响应。一旦日志中出现[GC pause (G1 Evacuation Pause) (mixed)],就要数它出现的频次和每次清理的老年代Region数量。
- 1分钟内出现3次以上Mixed GC,且每次回收的Old区域占比持续高于20%,说明老年代碎片化或存活对象增长过快
- 日志中若伴随[G1Ergonomics (Mixed GCs) add old region to collection set]高频出现,是G1在“追赶式”清理,回收已滞后于分配
- 注意是否紧接在Young GC后立刻出现Mixed GC——这往往意味着并发标记刚完成,老年代占用已触达InitiatingHeapOccupancyPercent阈值(默认45%)
检查停顿时间是否突破预期
G1以低延迟为目标,但停顿时间超标是压力最直观的体现。不只看单次峰值,更要看分布趋势:
- Young GC平均停顿超过50ms(尤其在配置了-XX:MaxGCPauseMillis=200的前提下),说明疏散(Evacuation)效率下降,可能是对象复制成本升高或GC线程争抢严重
- Mixed GC停顿突然拉长(如从80ms跳到300ms),同时日志中[ObjectCopy]耗时占比显著上升,提示老年代存活对象多、跨Region引用复杂
- 出现[GC remark]阶段耗时>20ms,说明最终标记阶段压力大,常因老年代引用关系网庞大或RSet更新开销高
留意并发阶段的异常线索
并发标记不STW,但它的延迟会拖慢整个回收节奏。这些日志不是GC停顿本身,却是压力前兆:
- [GC concurrent-mark-start]到[GC concurrent-mark-end]间隔超5秒,说明老年代对象图遍历缓慢,可能因引用链深或跨代引用过多
- 频繁出现[GC concurrent-cleanup-start]且耗时波动大,反映RSet清理不及时,G1正被动加快Mixed GC节奏
- 日志中反复出现Humongous allocation或Humongous regions reclaimed,说明巨型对象持续申请/释放,易造成内存碎片和额外回收负担


















