У меня есть критический процесс, работающий в java (1.6), с зарегистрированной обработкой завершения работы. В некоторых случаях, когда у меня возникает проблема с OOM (более подробная информация о проблеме ниже), процесс внезапно останавливается, я не получаю никаких журналов, мой catch (Throable x) не улавливает исключение.
Но ловушка выключения работает. Так что, если бы был способ узнать, что процесс будет остановлен из-за какого-нибудь неприятного OOM, я мог бы записать необходимую информацию перед выходом.
Есть ли способ сделать это?
О OOM : Так что, если бы был способ узнать, что процесс будет остановлен из-за какого-нибудь неприятного OOM, я мог бы записать необходимую информацию перед выходом.
Есть ли способ сделать это?
О OOM : Так что, если бы был способ узнать, что процесс будет остановлен из-за какого-нибудь неприятного OOM, я мог бы записать необходимую информацию перед выходом.
Есть ли способ сделать это?
О OOM : Не уверен, что является исключением, потому что, как я сказал, его не поймают. Я знаю, что это OOM, потому что я начинаю процесс с
-XX:+HeapDumpOnOutOfMemoryError
и получаю файл дампа кучи. В других случаях перехватывается исключение, и это ava.lang.OutOfMemoryError: превышен предел накладных расходов GC. Но не уверен, что это всегда так.
РЕДАКТИРОВАТЬ:
В случае, если это неясно: Я не пытаюсь предотвратить OOM, поскольку в некоторых случаях это может произойти по уважительным причинам, я просто хочу сделать убедитесь, что это ясно в файлах журнала приложения
Мой вопрос : можно ли узнать, что процесс завершается из-за OOM, находясь в ловушке отключения?
Мне нужно это сделать программно и из того же процесса .
На данный момент лучший подход - посмотреть, существует ли файл дампа кучи java_pid_pid для процесса_. Думаю, я мог бы попробовать Runtime.getRuntime (). FreeMemory () и сообщить о проблеме, если доступной памяти очень мало, но не уверен, насколько это надежно, возможно, когда процесс завершается, он уже освободил много памяти, подход Я думаю, что выше лучше всего.