简体中文
如何解读分析报告
逐节解读 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()、Metaspace、Promotion failed则是值得追查的线索。
优化建议
基于你的真实数据由规则引擎生成的落地建议,每条都带严重级别:
- 严重 —— 立即处理(内存泄漏、吞吐量低于 50%)。
- 警告 —— 尽快调优(存在 Full GC、显式 GC 调用、最大停顿过长)。
- 提示 —— 优化空间(堆偏大、事件过少、巨型对象分配)。
- 良好 —— 值得保持(吞吐量健康、ZGC 亚毫秒停顿)。
GC 事件明细
完整的解析结果:运行时间、类型、触发原因、停顿时长以及每次回收前后的堆大小。可以用时间戳与你自己的应用日志做交叉定位。