Skip to content

如何解读分析报告

逐节解读 EasyGC 分析器的输出。

关键指标

指标含义健康范围
GC 吞吐量应用线程(而非回收线程)运行时间占比≥ 95%
平均停顿stop-the-world 回收的平均耗时取决于 SLO;< 50 毫秒比较从容
最大/P99 停顿最差与 99 分位停顿——用户真正能感知的部分< 1 秒
Young GC 次数轻量回收次数频繁属正常
Full GC 次数全堆停顿回收次数0 —— 任何 Full GC 都值得排查
总停顿时长日志范围内所有 stop-the-world 时间之和与 SLA 预算对比
对象分配速率平均对象分配速度(MB/s)代码变更后重点观察
日志时间跨度日志覆盖的时间范围越长越可信

JVM 内存配置

日志中观察到的最大容量:堆总量、年轻代、老年代与元空间。不用登录机器就能推断出实际生效的 -Xmx / -Xmn(或分区)配置。

TIP

年轻代/老年代明细需要 Java 8 风格的详细日志。统一日志(-Xlog:gc*)只输出整堆数据;如需分区细节请加开 -Xlog:gc+heap*

图表

  • GC 前后堆使用率 —— 经典的"锯齿图"。GC 后曲线应在一个稳定区间内震荡;如果逐级抬升,说明有对象一直存活未被回收——这就是泄漏。
  • GC 停顿时间 —— 每一次 stop-the-world 事件随时间的分布,按类型堆叠(Young / Full / CMS 重新标记)。关注离群点和周期性尖刺。
  • GC 触发原因 —— 每次回收的触发原因。Allocation Failure 是健康的;System.gc()MetaspacePromotion failed 则是值得追查的线索。

优化建议

基于你的真实数据由规则引擎生成的落地建议,每条都带严重级别:

  • 严重 —— 立即处理(内存泄漏、吞吐量低于 50%)。
  • 警告 —— 尽快调优(存在 Full GC、显式 GC 调用、最大停顿过长)。
  • 提示 —— 优化空间(堆偏大、事件过少、巨型对象分配)。
  • 良好 —— 值得保持(吞吐量健康、ZGC 亚毫秒停顿)。

GC 事件明细

完整的解析结果:运行时间、类型、触发原因、停顿时长以及每次回收前后的堆大小。可以用时间戳与你自己的应用日志做交叉定位。