Как перезапустить JVM на OutOfMemoryError после создания дампа кучи?
Я знаю, о -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"
?
3 ответов
java -XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError="kill -9 %p" TestApp
JVM сначала сбросит кучу, а затем выполнит команды OnOutOfMemoryError (доказательство).
если вы просто хотите завершить работу, вы можете использовать один из следующих параметров:
-
-XX:+ExitOnOutOfMemoryError
-
-XX:+CrashOnOutOfMemoryError
аргументы VM были добавлены в Java версии 8u92, см. заметки.
ExitOnOutOfMemoryError
При включении этой опции JVM завершает работу на первое появление ошибки нехватки памяти. Его можно использовать, если вы предпочитайте перезапуск экземпляра JVM, а не Обработка из ошибка памяти.CrashOnOutOfMemoryError
Если этот параметр включен, когда возникает ошибка нехватки памяти, JVM аварийно завершает работу и создает текст и двоичные файлы сбоя.
Запрос На Улучшение:JDK-8138745 (имя параметра неверно, хотя JDK-8154713, ExitOnOutOfMemoryError
вместо ExitOnOutOfMemory
)
спорим среда выполнения задает конкретные ошибки на аварии. Проверьте этот код возврата и повторно запустите программу в этом случае. Возможно, тебе стоит записать это в сценарий.
sun jre позволяет вам кучи дампа на oome, возможно, openjdk тоже.