Отладчик Java Netbeans аварийно завершает работу с ошибками нехватки памяти - PullRequest
2 голосов
/ 12 августа 2010

В последнее время, работая над веб-приложением JSF, используя Netbeans 6.8, я постоянно получаю PermGen: Ошибки нехватки памяти.Я также заметил, что это не связано с горячей заменой кода, как некоторые люди предлагали на форумах;Обычно я перезапускаю свой локальный веб-сервер Tomcat 6.0 при каждом повторном развертывании кода.Раньше такое случалось со мной, но в последнее время это происходило постоянно.Обычно я не могу пройти более двух минут, прежде чем он выйдет из строя.

Важное замечание, которое я сделал по поводу этой проблемы, заключается в том, что это, похоже, происходит только при запуске отладчика.Если я регулярно запускаю сервер, он будет работать бесконечно долго.Как только я запускаю в режиме отладки, возникает эта проблема.

Я перепробовал все советы, которые я нашел до сих пор, об увеличении настроек памяти JAVA_OPT для Java в Tomcat;Я попытался увеличить доступную память для Netbeans в netbeans.conf.Все еще не повезло.Если вы хотите увидеть конкретные изменения конфигурации, которые я сделал, я также могу опубликовать это.

Я также читал, что это может быть результатом утечек памяти в Java.Я попытался запустить профилировщик Netbean, но обычно он тоже зависал, прежде чем я смог сделать что-то действительно полезное.Кроме того, когда он выполнялся, все выделения объектов со смешными поколениями были вещами в java-библиотеках или примитивами - char [] были самым большим бременем памяти приложения, например, с самыми большими поколениями.

Мне бы очень хотелось узнать, была ли у кого-то подобная проблема раньше, и если да, то как они ее решили.Это начинает серьезно мешать моей способности выполнять свою работу.

Спасибо за любую помощь.

Ответы [ 2 ]

2 голосов
/ 24 марта 2011

добавить эту запись в catlina.sh (или bat), у меня это сработало

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 
    -server -Xms1536m -Xmx1536m
    -XX:NewSize=256m -XX:MaxNewSize=512m -XX:PermSize=512m 
    -XX:MaxPermSize=512m -XX:+DisableExplicitGC
0 голосов
/ 31 марта 2011

Что-то, что я нашел полезным для отслеживания утечек памяти без запуска профилировщика или отладчика, это использование команды "jmap -histo" (поставляется с jdk)Сохраните вывод этой программы в файл.Выполняйте это каждые несколько минут, пока ваше приложение работает.Соберите выходные данные и ищите объекты, которые постоянно увеличиваются в количестве и размере.Я даже написал быстрое приложение для составления графика выбранных объектов с течением времени, чтобы действительно выделить убегающие объекты, просто чтобы было легче увидеть, где могут происходить утечки.

...