我知道-XX:+HeapDumpOnOutOfMemoryErrorJVM参数。我也知道-XX:OnOutOfMemoryError="cmd args;cmd args",这kill -3 <JVM_PID>将要求堆转储。
-XX:+HeapDumpOnOutOfMemoryError
-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"吗?
OutOfMemoryError
-XX:OnOutOfMemoryError="kill -3 %p;sleep <time-it- takes-to-dump>;kill -9 %p"
java -XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError="kill -9 %p" TestApp
JVM将首先转储堆,然后执行OnOutOfMemoryError命令(证明)。