排查和解决 (OOM)是高级开发人员和架构师必备的核心技能。OOM 并不单单意味着“内存不够了”,它通常是代码缺陷、架构不合理或 JVM 参数配置不当的集中体现。 我通常会按照 “确认异常类型 -> 保护现场与恢复服务 -> 分析 Dump 文件 -> 定位根因 -> 修复与验证 -> 预防” 这一套标准化的流程来进行排查。 以下是具体的排查和解决步骤: --- 第一步:确认 OOM 的具体类型 看到 OOM,第一步必须看日志中的具体错误信息。Java 中的 OOM 主要分为以下几种,不同类型的排查方向完全不同: 1. (最常见) 含义:堆内存不足。对象不断创建,且无法被垃圾回收(GC)。 方向:排查内存泄漏,或者是否有超大对象/大批量数据被加载到内存。 2. 含义:GC 效率极低。JVM 花了 98% 的时间做 GC,但只回收了不到 2% 的内存。通常是堆内存即将被撑爆的前兆。 方向:同 Heap Space,重点排查内存泄漏。 3. (或老版本的 PermGen space) 含义:元空间不足。加载的类信息过多。 方向:排查是否有大量的动态类生成(如 CGLIB、Spring...