Где найти дамп кучи после «Недостаточно памяти» - PullRequest
5 голосов
/ 09 марта 2010

Я использую ASANT для запуска XML-файла, который указывает на файл NARS.jar.

Я получаю "java.lang.OutOfMemoryError: Java heap space", и я изучаю эту проблему.

Итак, я обнаружил, что мне нужно установить «-XX: + HeapDumpOnOutOfMemoryError», чтобы создать файл дампа для анализа.

Я отредактировал ASANT.bat и добавил «-XX: + HeapDumpOnOutOfMemoryError» в ANT_OPTS:

set ANT_OPTS= "-XX:+HeapDumpOnOutOfMemoryError" "-Dos.name=Windows_NT" "-Djava.library.path=%AS_INSTALL%\lib;%AS_ICU_LIB%;%AS_NSS%" "-Dcom.sun.aas.installRoot=%AS_INSTALL%" "-Dcom.sun.aas.instanceRoot=%AS_INSTALL%" "-Dcom.sun.aas.instanceName=server" "-Dcom.sun.aas.configRoot=%AS_CONFIG%" "-Dcom.sun.aas.processLauncher=SE" "-Dderby.root=%AS_DERBY_INSTALL%"  

Но я не могу найти файл дампа. Я буду использовать Eclipse Memory Analyzer для анализа, когда найду дамп.

Я также пытался установить параметр "-XX: HeapDumpPath = c: \ memdump \ bds.hprof", но там не было создано дампов.

Кто-нибудь понял, что я делаю не так? Заранее спасибо

Ответы [ 5 ]

1 голос
/ 30 марта 2018

Похоже, ваше приложение работает в Windows. Путь к файлу Windows должен быть экранирован с помощью \. Согласно вашему примеру, -XX: HeapDumpPath должен выглядеть так:

-XX:HeapDumpPath=c:\\memdump\\bds.hprof

Помимо ‘-XX: + HeapDumpOnOutOfMemoryError’, есть также несколько других опций для захвата дампов кучи .

1 голос
/ 09 марта 2010

Вы уверены, что ANT - это процесс с OOME? Это может быть процесс, запущенный ANT.

Добавьте «-debug» к ANT_OPTS для отладочной информации.

Вы видите, как цели распечатываются во время выполнения?

Вы также можете разветвить различные процессы, запущенные муравьем (замедлит процесс, но может помочь изолировать виновника)

Наконец, может быть, вам просто нужно больше памяти, чем по умолчанию. Добавить:

-Xms256m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=256m

к ANT_OPTS

1 голос
/ 09 марта 2010

Я обнаружил, что могу использовать VisualVM от SUN, чтобы получить heapdump и посмотреть его вживую.

Простое решение

1 голос
/ 09 марта 2010

Он находится в рабочем каталоге приложения (т.е. где вы его запустили). Я не уверен, что произойдет, если процесс не имеет необходимых прав для этого. Возможно, запись дампа не удалась бы тихо.

0 голосов
/ 09 марта 2010

Ммм ... как насчет того, куда указывает java.io.tmpdir?

...