Я хотел бы предоставить моей системе способ определения того, произошло ли исключение нехватки памяти или нет. Цель этого упражнения состоит в том, чтобы выставить этот флаг через JMX и действовать соответствующим образом (, например. настроив соответствующее оповещение в системе мониторинга ), иначе эти ошибки останутся незамеченными в течение нескольких дней.
Наивным подходом для этого было бы установить обработчик неперехваченных исключений для каждого потока и проверить, является ли возникшее исключение экземпляром OutOfMemoryError
, и установить соответствующий флаг. Однако такой подход нереалистичен по следующим причинам:
Throwable
и оставить себе.Один из возможных сценариев, которые я вижу, это манипулирование байт-кодом (, например. добавление какого-либо аспекта поверхOutOfMemoryError
), однако я не уверен, что это правильный подход или вообще это выполнимо.
Мы включили -XX:+HeapDumpOnOutOfMemoryError
, но я не вижу в этом решения этой проблемы, поскольку он был разработан для чего-то другого -и не обеспечивает обратного вызова Java, когда это происходит.
Кто-нибудь сделал это? Как бы вы ее решили или предложили решить? Любые идеи приветствуются.