2015-05-29 6 views
8

Я знаю о параметре JVM -XX:+HeapDumpOnOutOfMemoryError. Я также знаю о -XX:OnOutOfMemoryError="cmd args;cmd args" и что kill -3 <JVM_PID> запросит кучу кучи.Как перезапустить JVM в OutOfMemoryError _after_, создавая кучу кучи?

Вопрос: Как я могу убедиться, что я, на OutOfMemoryError, сначала сделать полный дамп кучи и затем силу перезагрузка компьютера (или убить) после того, как дамп делается? Мой лучший выбор -XX:OnOutOfMemoryError="kill -3 %p;sleep <time-it-takes-to-dump>;kill -9 %p"?

+2

Не было бы лучше контролировать процесс извне в JVM, и перезапустить его, соответственно, например, unix-скрипт, система мониторинга? если jvm не хватает памяти, я бы не хотел полагаться на него, чтобы иметь возможность надежно запускать команду для перезапуска – vikingsteve

ответ

15
java -XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError="kill -9 %p" TestApp 

JVM будет свалка кучи, а затем выполнить команды OnOutOfMemoryError (proof).

0

Держу пари, что время выполнения задает определенный уровень ошибок при сбое. Проверьте этот код возврата и перезапустите программу в этом случае. Вы должны поместить это в скрипт.

Солнце jre позволяет вам сбрасывать свалку на oome, возможно, openjdk тоже.

4

Если вы просто хотите, чтобы выключения можно использовать один из следующих параметров:

  • -XX:+ExitOnOutOfMemoryError
  • -XX:+CrashOnOutOfMemoryError

Аргументы VM были добавлены в Java версии 8u92 см release notes.

ExitOnOutOfMemoryError
При включении этой опции, JVM выходит на первого появления ошибки из-за нехватки памяти. Его можно использовать, если вы предпочитаете перезапускать экземпляр JVM вместо обработки ошибок .

CrashOnOutOfMemoryError
Если эта опция включена, когда из-за нехватки памяти происходит ошибка, сбои JVM и производит текст и двоичные файлы аварии.

Enhancement Request: JDK-8138745 (параметр именование неправильно, хотя JDK-8154713, ExitOnOutOfMemoryError вместо ExitOnOutOfMemory)

Смежные вопросы