导出 50 万行报表,堆直接原地去世:一次 OOM 的 dump 分析与流式改造
运营点了一下“导出全部订单”,服务就抛出 Java heap space 并重启。靠 HeapDumpOnOutOfMemoryError 留住现场,用 MAT 的 Dominator Tree 揪出一个 List,最后改成分页 + EasyExcel 流式写出。
从一个关键词,发现新的思路。
运营点了一下“导出全部订单”,服务就抛出 Java heap space 并重启。靠 HeapDumpOnOutOfMemoryError 留住现场,用 MAT 的 Dominator Tree 揪出一个 List,最后改成分页 + EasyExcel 流式写出。
服务凌晨无声消失,没有 hs_err 文件也没有 OutOfMemoryError。dmesg 里一行 Out of memory: Killed process 揭开真相:JVM 堆加堆外内存把机器吃光,被内核枪毙。附排查命令、oom_score 原理和堆参数预留算法。