Використання параметра HeapDumpOnOutOfMemoryError для скидання купи для JBoss


182

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


1
Я думаю, це поточна папка.
Валентин Тихоміров

Відповіді:


246

Ось що має сказати в документації Oracle :

За замовчуванням дамп купи створюється у файлі під назвою java_ pid .hprof в робочій директорії VM, як у прикладі вище. Ви можете вказати альтернативне ім'я файлу або каталог за допомогою -XX:HeapDumpPath=параметра. Наприклад -XX:HeapDumpPath=/disk2/dumps , спричинить згенерування звалища в /disk2/dumps каталозі.


16
Тут також перераховані всі параметри, що стосуються продуктивності VM: 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, знадобилося всього кілька хвилин.
Арон Лорінц

Що станеться, якщо ми подамо шлях до папки, якої немає в системі? Чи створить папку і натисне горбковий дамп у цій папці?
Vinit89

47

Ви можете переглянути цей дамп із консолі UNIX.

Шлях для відвалу купи буде наданий як змінна відразу після того, як ви розмістили згадану змінну.

Наприклад:

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

Ви можете переглянути дамп із консолі на згаданому шляху.


4

Мені було важко розшифрувати, що мається на увазі під "робочим каталогом VM". У моєму прикладі я використовував програму Java Service Wrapper для виконання jar - файли дампа створювались в каталозі, куди я розмістив програму обгортки, наприклад c: \ myapp \ bin. Причиною цього я виявив те, що файли можуть бути досить великими, і вони заповнили жорсткий диск, перш ніж я виявив їхнє місцезнаходження.


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

2

Якщо ви не використовуєте параметр "-XX: HeapDumpPath", тоді у випадку JBoss EAP / As за замовчуванням файл допису купи буде генерований у каталозі "JBOSS_HOME / bin".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.