Как сохранить кучу (дамп в файл) в Eclipse? - PullRequest
5 голосов
/ 08 мая 2009

Я получаю эту ошибку при запуске или отладке моего GA / AI из MyEclipse:

Исключение в потоке "main" java.lang.OutOfMemoryError: пространство кучи Java

eclipse.ini выглядит так:

-showsplash com.genuitec.myeclipse.product
--launcher.XXMaxPermSize 256m
-vmargs
-Xms128m
-Xmx512m
-Duser.language=en 
-XX:PermSize=128M 
-XX:MaxPermSize=256M

MyEclipse называется так:

"C:\Program Files\MyEclipse 6.0\eclipse\eclipse.exe" -vm "C:\Program Files\MyEclipse 6.0\jre\bin\javaw.exe"  -vmargs -Xms1448M -Xmx1448M

поднимает настройки vm из этого:

"C:\Program Files\MyEclipse 6.0\eclipse\eclipse.exe" -vm "C:\Program Files\MyEclipse 6.0\jre\bin\javaw.exe"  -vmargs -Xms80M -Xmx1024M

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

-XX:+HeapDumpOnCtrlBreak
-XX:+HeapDumpOnOutOfMemoryError

в аргументах Программы никак не повлияло. Как заставить что-то работать с дополнительным анализом использования памяти? Например, jstack в настоящее время недоступен на платформах Windows. И использование SendSignal не имеет эффекта, который я вижу.

a screen shot

Ответы [ 3 ]

11 голосов
/ 08 мая 2009

Есть несколько способов получить дампы кучи. Вот некоторые из них, которые я использовал:

  1. -XX:+HeapDumpOnOutOfMemoryError должен получить дамп, если вы попали в OOM.
  2. Соединение с VisualVM (бесплатно) и использование его графического интерфейса для принудительного создания дампа кучи
  3. Используйте один из многих хороших коммерческих профилировщиков (JProfiler, YourKit, ...)
  4. Использование jmap (см. Ниже) для принудительного создания дампа из запущенного процесса

Если вы используете Java 6, jmap должен работать в Windows. Это может быть полезно, если вы хотите сбросить кучу, и вы не попали в OOM. Используйте диспетчер задач Windows, чтобы найти pid вашего Java-приложения, и в консоли запустите:

jmap -dump:format=b,file=c:\heap.bin <pid>

В дополнение к VisualVM, анализатор памяти Eclipse (также бесплатный) может помочь вам проанализировать, что занимает все пространство после получения дампа.

2 голосов
/ 19 октября 2012

-XX:+HeapDumpOnOutOfMemoryError следует указывать в «VM Arguments», а не «Program Arguments»

1 голос
/ 08 мая 2009

Вы можете контролировать использование памяти с JConsole.

jstat также поможет.

...