我知道-XX:+HeapDumpOnOutOfMemoryError
JVM参数.我也知道-XX:OnOutOfMemoryError="cmd args;cmd args"
并且kill -3 <JVM_PID>
会请求堆转储.
问题:如何确保在启动转储完成后OutOfMemoryError
首先进行完全堆转储然后强制重启(或终止)?是我最好的选择-XX:OnOutOfMemoryError="kill -3 %p;sleep <time-it-takes-to-dump>;kill -9 %p"
吗?
apa*_*gin 22
java -XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError="kill -9 %p" TestApp
Run Code Online (Sandbox Code Playgroud)
JVM将首先转储堆,然后执行OnOutOfMemoryError命令(证明).
fla*_*nze 13
如果您只想关闭,可以使用以下参数之一:
-XX:+ExitOnOutOfMemoryError
-XX:+CrashOnOutOfMemoryError
VM参数在Java版本8u92中添加,请参阅发行说明.
ExitOnOutOfMemoryError
启用此选项时,JVM会在第一次出现内存不足错误时退出.如果您更喜欢重新启动JVM实例而不是处理内存不足错误,则可以使用它.CrashOnOutOfMemoryError
如果启用此选项,则在发生内存不足错误时,JVM会崩溃并生成文本和二进制崩溃文件.
增强请求:JDK-8138745(参数命名错误,但 JDK-8154713,ExitOnOutOfMemoryError
而不是ExitOnOutOfMemory
)