本文目录#

背景#

生产事故发生后,需要在不中断服务的前提下还原 JVM 内存泄漏路径,明确对象增长链路与触发条件。

取证流程#

  • 启用 jcmd VM.native_memory 与 JFR 事件,定位泄漏时段的类与线程;
  • 使用堆转储 + MAT Leak Suspects,分析 Dominator Tree 与引用链;
  • 结合 GC 日志中 ObjectCountAfterFullGC,验证是否存在长尾对象存活;
  • 将线程转储与业务日志关联,重建请求上下文,确认触发入口。

处置策略#

  • 对确认泄漏的缓存/集合,增加定时修剪与容量报警;
  • 通过 JMC 触发条件事件,捕获后续类似症状;
  • 在回滚或热修后,持续监控 Metaspace、Old Gen 与 NMT 指标。

自检清单#

  • 是否保留事故期间的堆转储、GC 日志与线程快照?
  • 是否确认泄漏对象来自业务代码而非第三方库?
  • 是否在回归环境复现并验证修复有效?

参考资料#


本作品系原创,采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,转载请注明出处。