Использование параметра HeapDumpOnOutOfMemoryError для дампа кучи для JBoss

182

Мне сказали, что я могу добавить -XX:+HeapDumpOnOutOfMemoryErrorпараметр в параметры запуска JVM в мой сценарий запуска JBoss, чтобы получить дамп кучи, когда в нашем приложении возникает ошибка нехватки памяти. Мне было интересно, где эти данные сбрасываются? Это просто на консоль или какой-нибудь лог-файл? Если это только для консоли, что если я не вошел на сервер Unix через консоль?

Дмитрий Трунов
источник
1
Это текущая папка, я думаю.
Валентин Тихомиров

Ответы:

246

Вот что говорит документация Oracle :

По умолчанию дамп кучи создается в файле с именем java_ pid .hprof в рабочем каталоге виртуальной машины, как в примере выше. Вы можете указать альтернативное имя файла или каталог с -XX:HeapDumpPath=опцией. Например -XX:HeapDumpPath=/disk2/dumps , вызовет создание дампа кучи в /disk2/dumps каталоге.

Мэтт Солнит
источник
16
Здесь также перечислены все параметры, связанные с производительностью виртуальной машины: java.sun.com/javase/technologies/hotspot/…
Рави Гупта
4
Важный! Флаги HeapDump доступны только в Java 1.5.0_07.
rustyx
14
Также важно понимать, что JVM НЕ будет перезаписывать существующий дамп кучи в файле HeapDumpPath, вы увидите нечто похожее на "Unable to create /tmp/java_pidpid.hprof: File exists"стандартный вывод. Не забудьте переместить файл дампа из пути дампа, чтобы очистить путь для любых будущих файлов дампа; и использовать <pid>заполнитель в имени файла, чтобы увеличить энтропию в имени файла.
Бен
1
Это было чрезвычайно полезно. Потребовалось всего несколько минут, чтобы найти утечку с Eclipse Memory Analyzer.
Арон Лоринц
Что произойдет, если мы дадим путь к папке, которой нет в системе? Будет ли он создавать папку и помещать дамп горба в эту папку?
Vinit89
47

Вы можете просмотреть этот дамп с консоли UNIX.

Путь к дампу кучи будет указан как переменная сразу после того, как вы поместили указанную переменную.

Например:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${DOMAIN_HOME}/logs/mps"

Вы можете просмотреть дамп из консоли по указанному пути.

Сваминатан Кришнамурти
источник
4

Мне было трудно расшифровать, что подразумевается под «рабочим каталогом виртуальной машины». В моем примере я использовал программу Java Service Wrapper для выполнения jar - файлы дампа были созданы в каталоге, где я разместил программу-обертку, например, c: \ myapp \ bin. Причина, по которой я это обнаружил, заключается в том, что файлы могут быть довольно большими, и они заполняют жесткий диск до того, как я обнаружил их местоположение.

B5A7
источник
Ваш рабочий каталог можно найти с помощью команды pwdx <PID>. Сначала сделайте ps -ef | grep java, найдите свой PID для своего приложения java, затем запустите pwdx <PID>. Он скажет вам рабочий каталог.
RCG
2

Если вы не используете опцию «-XX: HeapDumpPath», то в случае JBoss EAP / As по умолчанию файл дампа кучи будет создан в каталоге «JBOSS_HOME / bin».

Свапнил Чаудхари
источник