在日常的后端开发中,OOM(Out Of Memory)绝对是让所有 Java 程序员心头一紧的词汇。就在上周,我们的核心业务系统在晚高峰期间突然爆发了大量的 OOM 告警,服务器相继宕机,业务受到了不小的影响。经过几个小时的紧急排查,最终发现罪魁祸首竟然是我们平时非常熟悉的 ThreadLocal。
这篇文章将详细复盘这次线上 OOM 的排查过程、原因分析以及最终的解决方案,希望能为大家提供一些借鉴。
一、 事故现场:突如其来的报警风暴
上周四晚上 8 点左右,正是流量高峰期。监控大盘上,某核心服务的接口响应时间突然从平时的 50ms 飙升到了 2000ms 以上,紧接着,运维群里的报警机器人开始疯狂刷屏,提示该服务的多个节点出现 java.lang.OutOfMemoryError: Java heap space。
2026/4/5大约 6 分钟