Java:为什么堆溢出不会触发堆转储?

问题描述

我正在尝试分析一个应用程序,该应用程序一次又一次地因堆内存不足而终止。

应用程序开始于:

export JAVA_OPTS="-xms256M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/our_app_here/heapdump.dmp"

在应用程序完全死亡之前,我在日志中看到多个这样的条目:

2021-01-11 07:17:05,039 [ERROR] [User=xxxxx] [class-name-here] Exception occured: java.lang.OutOfMemoryError: Java heap space

这些错误发生在 try-catch 中,它们显然被捕获并记录下来。 令人惊讶的是,该应用程序继续运行,但很快就崩溃了。

为什么在内存不足的情况下 JVM 不写入任何堆转储?我认为“HeapDumpOnOutOfMemoryError”选项就是为了触发那个。这样的堆转储对于找出我们的内存泄漏所在的位置不是必不可少的,但如果不是必需的,那将是最有帮助的。

这是在 SLES 12 上使用 Java 8 (AdooptOpenJDK 8u252),并且肯定有足够的磁盘空间用于堆转储!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...