-XX:+HeapDumpOnOutOfMemoryError 会打印哪些oom错误

-XX:+HeapDumpOnOutOfMemoryError 参数会在 JVM 发生以下 ‌OutOfMemoryError(OOM)‌ 错误时自动生成堆转储文件(Heap Dump),便于后续分析内存溢出原因:

一、触发转储的 OOM 错误类型

Java 堆溢出(Java Heap Space)‌

当对象数量超过堆容量限制时触发,典型错误信息:
java.lang.OutOfMemoryError: Java heap space
原因‌:内存泄漏或堆内存配置不足(如 -Xmx 过小)‌。

元空间溢出(Metaspace)‌

类元数据(如加载的类信息)超过元空间容量时触发,典型错误信息:
java.lang.OutOfMemoryError: Metaspace
原因‌:动态生成大量类(如反射、CGLIB)或 -XX:MaxMetaspaceSize 配置过小‌。

GC Overhead Limit Exceeded‌

当 JVM 花费超过 98% 的时间执行 GC 且仅回收不到 2% 的堆内存时触发,典型错误信息:
java.lang.OutOfMemoryError: GC overhead limit exceeded
原因‌:堆内存中存在大量无法回收的存活对象(如内存泄漏或对象生命周期过长)‌。

直接内存溢出(Direct Buffer Memory)‌

使用 NIO 直接内存(Direct ByteBuffer)超出限制时触发,典型错误信息:
java.lang.OutOfMemoryError: Direct buffer memory
原因‌:未合理释放直接内存或 -XX:MaxDirectMemorySize 配置不足‌。

无法创建新线程(Unable to Create New Native Thread)‌

系统线程数达到操作系统限制时触发,典型错误信息:
java.lang.OutOfMemoryError: unable to create new native thread
原因‌:线程池配置不合理或操作系统资源限制‌。

二、不触发转储的异常类型

栈溢出(StackOverflowError)‌:由递归过深或方法调用链过长导致,不属于 OOM 错误‌。
本地内存溢出(Native Memory Exhaustion)‌:由 JVM 自身或本地库(如 JNI)引发,可能不触发堆转储‌。

三、关键配置建议

启用堆转储‌:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dump.hprof

辅助分析参数‌:
-Xmx 和 -Xms 设置合理堆大小‌。
-XX:MaxMetaspaceSize 限制元空间容量‌。
-XX:MaxDirectMemorySize 控制直接内存上限‌。

通过分析生成的堆转储文件(如使用 MAT 工具),可定位具体内存泄漏或配置问题‌。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值