上一题下一题

Java 服务升级 JDK 后吞吐量下降且 P99 延迟升高,如何结合 GC 日志、JFR 和业务指标判断是垃圾回收还是代码行为导致?

旗舰版
来源:bytedance中级工程师GC日志分析JFR性能诊断JDK升级性能回归业务指标关联分析
答案解析

我会先把问题拆成两部分:吞吐量下降是 CPU、锁竞争、线程调度还是 GC 导致的;P99 升高是停顿时间增加,还是业务处理本身变慢。不能只看 GC 次数就下结论,需要把 GC 日志、JFR 和业务指标按时间线对齐。

先看业务侧指标,包括 QPS、响应时间分位数、错误率、线程池队列长度、活跃线程数、CPU 使用率、内存使用率、数据库和下游调用耗时。如果升级后 QPS 下降的同时 CPU 降低、线程池队列变长,并且 P99 尖峰与 GC 停顿时间重合,优先怀疑 GC 或内存分配行为。如果 CPU 持续升高,但 GC 停顿并没有明显增加,就更像是代码路径、编译优化失效、锁竞争或序列化开销变化。

GC 日志重点关注几个方面:

GC 类型和频率是否发生变化,比如 Young GC、Mixed GC 或 Full GC 次数是否增加。 单次暂停时间、暂停总时间以及最大暂停时间是否变长,尤其要和 P99 的时间点对齐。 Eden、Survivor、老年代的占用和回收效果,是否出现对象晋升过快、老年代增长、回收后内存下降不明显。 分配速率是否明显上升,是否出现晋升失败、并发标记跟

登录后查看完整内容