Ответ 1
java -XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError="kill -9 %p" TestApp
JVM сначала выгрузит кучу, а затем выполнит команды OnOutOfMemoryError (доказательство).
Я знаю параметр -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"
?
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
)
Я уверен, что время выполнения задает определенный уровень ошибок при сбое. Проверьте этот код возврата и перезапустите программу в этом случае. Вы должны поместить это в script.
Sun jre позволяет вам кучи дампа на oome, возможно, openjdk тоже.
когда я даю tomcat -XX: + ExitOnOutOfMemoryError -Xms512m -Xmx2048m, он не может выйти, когда OutOfMemoryError.if я даю -Xms64m -Xmx256m, он работает нормально. Как мне это сделать?