Назад | Перейти на главную страницу

Уместно ли использовать HeapDumpOnOutOfMemoryError в производственной среде?

Мы изо всех сил пытались диагностировать причину ошибки OutOfMemoryError, возникшей на одном из наших рабочих серверов. Наши попытки воспроизвести проблему в тестах на выдержку пока не увенчались успехом, и мы рассматриваем возможность включения -XX:+HeapDumpOnOutOfMemoryError на наших производственных серверах, так что если это повторится снова, по крайней мере, у нас будут какие-то данные.

Разумно ли включать этот параметр на производственных серверах?

Взгляните в документация:

B.1.2 -XX: + опция HeapDumpOnOutOfMemoryError

В -XX:+HeapDumpOnOutOfMemoryError Параметр командной строки указывает виртуальной машине HotSpot создать дамп кучи, когда выделение из кучи Java или постоянное создание не может быть выполнено. С этой опцией нет накладных расходов, поэтому это может быть полезно для производственных систем где OutOfMemoryError занимает много времени, чтобы всплыть на поверхность.

Вы также можете указать эту опцию во время выполнения на вкладке MBeans в утилите jconsole.

Дамп кучи находится в HPROF двоичный формат, поэтому его можно анализировать с помощью любых инструментов, которые могут импортировать этот формат. Например, инструмент jhat можно использовать для элементарного анализа дампа.

-XX:+HeapDumpOnOutOfMemoryError flag не вызывает проблем с производительностью или безопасностью во время выполнения. Флаг проверяется только после OutOfMemoryError случилось.

Вы можете указать фактический путь, по которому сохраняется файл, используя соответствующий -XX:HeapDumpPath флаг. (Независимо от того, где сохранен файл, убедитесь, что файловая система и / или процесс Java имеют необходимую конфигурацию разрешений, чтобы иметь возможность писать туда.)