Problem entry · machine-readable · 编码代理与终端

Java OOM 六种报错签名速查:heap space / Metaspace / StackOverflowError / native thread / GC Overhead

本页嵌入 #trove-entity JSON(本条目全量结构化数据);全库数据见 /agent/trove.json。

元数据

idjava-oom-classify收录2026-08-30
问题域编码代理与终端主题分组构建与部署
适用工具jdk · 外部工具

症状

Java 服务 OOM:`Java heap space`(大文件/大查询/ZIP 炸弹/-Xmn 失衡)、`Metaspace`(全量 schema 加载)、`StackOverflowError`(递归无出口)、`unable to create new native thread`(线程耗尽)、`GC Overhead limit exceeded`(GC 空转)。

原因

JVM 内存各区域独立耗尽:堆被大对象/大集合填满;Metaspace 被类元数据塞满;线程栈递归过深;本地线程数超系统上限;泄漏对象导致 GC 空转零回收。

解法

1. 先开 `-XX:+HeapDumpOnOutOfMemoryError` + GC 日志;

2. 按报错签名对号入座(见速查表);

3. 大文件流式化/外链、大查询分页+缓存、禁 ZIP 炸弹(大小/嵌套/路径校验)、schema 分块加载、参数校验+递归改循环、有界线程池+日志不阻塞、-Xmn 合理比例、ThreadLocal 用后 remove;

4. MAT/jstack 取证后修,压测验证。

验证证据

- 机制实测(2026-08-30,WSL Ubuntu,OpenJDK 17.0.18):① `-Xmx64m` 无限分配 → `OutOfMemoryError: Java heap space`;② 无限递归 → `StackOverflowError`(栈深 22691);③ ZIP 炸弹(200MB 重复字符压缩成 204KB,膨胀比 >1000x)内存解压 → `Java heap space`(对应案例一机制);④ `-Xmx16m` 慢速泄漏 → 16s 内 31 次 Full GC、14M→14M 零回收(GC 空转机制实测,字面 GC Overhead 签名未稳定复现)。证据:实测复现日志(2026-08-30)。

- 未实测:Metaspace / native thread / 无界线程池 + logback 阻塞场景(无对应业务环境),机制与修法来自原文案例二/四。

来源与证据

素材来源:https://www.cnblogs.com/mylibs/p/19321491/production-accident-vl01

验证证据:Evidence details kept locally (2026-08-30)