Как сохранить кучу (дамп в файл) в Eclipse?
-
10-07-2019 - |
Вопрос
Я получаю эту ошибку при запуске или отладке моего 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 не имеет эффекта, который я вижу.
Решение
Есть несколько способов получить дампы кучи. Вот некоторые из них, которые я использовал:
<Ол> -XX: + HeapDumpOnOutOfMemoryError
должен получить ваш дамп, если вы нажмете OOM. Если вы работаете с Java 6, jmap должен работать в Windows. Это может быть полезно, если вы хотите сбросить кучу, и вы не попали в OOM. Используйте диспетчер задач Windows, чтобы найти pid вашего Java-приложения, и в консоли запустите:
jmap -dump:format=b,file=c:\heap.bin <pid>
В дополнение к VisualVM, Eclipse Memory Analyzer (также бесплатный) может помочь вам проанализировать, что ест все пространство, как только у вас есть свалка.
Другие советы
-XX: + HeapDumpOnOutOfMemoryError
следует поместить в VM Arguments
" не " Программные аргументы
"
Вы можете отслеживать использование памяти с помощью JConsole. Р>
jstat также поможет . р>