慢性内存泄漏表现为full gc后堆内存基线阶梯式抬升、old区持续缓慢上升且不回落、相关类实例数同步阶梯增长;需结合visualgc分代监控、4小时以上时间尺度分析及配置一致性校验。

关键看堆内存曲线的“呼吸节奏”——短暂抖动是快起快落,慢性泄漏是阶梯式爬升且不回落。
看 Full GC 后的基线是否抬高
正常情况:每次 Full GC 后,堆内存应明显下降,并回到接近之前的水平;
泄漏特征:Full GC 后内存没回落到原有位置,而是停在更高处,形成一级台阶。连续几次后,出现多个“台阶”,就是典型慢性泄漏信号。
拉长时间尺度对比 Eden 与 Old 区走势
需安装 VisualGC 插件才能分代查看:
• Eden 区:频繁“尖峰式”骤升骤降,属 Minor GC 正常行为;
• Old 区:若持续缓慢上升、Full GC 后仅小幅下降甚至不降,说明大量对象活过多次 GC 进入老年代,却未被回收;
• 时间范围建议拉到 4 小时以上,避免把一次批量任务引发的临时增长误判为泄漏。
结合实例数量变化交叉验证
堆内存涨了,得弄清是谁在涨:
• 切换到 “Classes” 标签页,按 “Instances” 排序;
• 找出数量持续增长、且与业务逻辑不匹配的类(比如某 Service 类实例从几十涨到上万);
• 点击该类,看 “Instance Count” 曲线是否同步阶梯上升;
• 若某类实例数和堆内存曲线同频抬升,基本可锁定问题源头。
留意告警与配置一致性
VisualVM 页面会自动标红提示使用率 ≥95% 的区域,这是强预警信号;
同时核对右上角显示的 “Max Heap” 数值是否与 JVM 启动参数 -Xmx 一致——若不一致,说明配置未生效,监控基准就不可靠。










