У меня есть критический процесс, выполняющийся в java (1.6), с зарегистрированным крючком остановки. В некоторых случаях, когда я получаю проблему с OOM (подробнее об этой проблеме ниже), процесс внезапно прекращается, я не получаю ни одного из моих журналов, мой catch (Throable x) не вылавливает исключение.jvm: можно ли узнать, что процесс завершается из-за OOM, когда он находится в режиме ожидания?
Но работает крюк отключения. Поэтому, если бы был способ узнать, что процесс будет завершен из-за какого-то неприятного OOM, я могу записать необходимую информацию перед выходом.
Есть ли способ сделать это?
О OOM: Не знаете, в чем исключение, потому что, как я уже сказал, оно не попадается. Я знаю, что это OOM, потому что я начинаю процесс с
-XX:+HeapDumpOnOutOfMemoryError
и я получаю файл дампа кучи. В других случаях исключение поймано, и это ava.lang.OutOfMemoryError: превышение верхнего предела GC. Но не уверен, что это всегда так.
EDIT:
В случае не ясно: Я не пытаюсь, чтобы предотвратить OOM, как это может произойти по уважительным причинам в какой-то сценарий, я просто хочу, чтобы убедиться, что это ясно в файлы журналов приложений
Мой вопрос:: можно ли узнать, что процесс завершается из-за OOM во время остановки?
Мне нужно сделать это программно и из того же процесса.
На данный момент лучший подход - это увидеть, существует ли файл дампа кучи java_pid_pid process_.hprof (я знаю pid) с недавней датой и выводом было OOM. Я предполагаю, что я мог бы попробовать Runtime.getRuntime(). FreeMemory() и сообщить об ошибке, если доступная память очень низкая, но не уверен, насколько это надежно, возможно, когда процесс завершает работу, он уже выпустил много памяти, подход выше, я думаю.
Итак, ваш вопрос: «Что происходит?» - правильно? – dacwe
Не сердитесь на вопрос, но вы поймаете (исключение x) или поймаете (Throable x), поскольку OOM Throable, я уверен, что вы это знаете, и вряд ли это поймает, если это произойдет, но все же стоит проверить ... –
как я упоминаю (может быть, не ясно, я снова отредактирую) У меня есть catch (Throable x), не имеет эффекта. спасибо – Persimmonium