java.lang.OutOfMemoryError: пространство кучи Java с NetBeans

Это ошибка, которую я получаю, когда запускаю свое веб-приложение в экземпляре контейнера сервлета Tomcat, запущенного NetBeans. Чтобы исправить это, я даже изменил размер кучи в netbeans.conf, но все равно выдает ту же ошибку. Как я могу предотвратить это?

HTTP Status 500 - 

--------------------------------------------------------------------------------

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

javax.servlet.ServletException: Servlet execution threw an exception
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)


root cause 

java.lang.OutOfMemoryError: Java heap space

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.9 logs.

person Community    schedule 04.04.2009    source источник
comment
stackoverflow.com/questions/705605/   -  person erickson    schedule 04.04.2009
comment
stackoverflow .com/questions/673646/   -  person Steen    schedule 12.04.2011
comment
правильный ответ на этот вопрос на самом деле stackoverflow.com/questions/717550/. Ответ, получивший большое количество голосов, является хорошим ответом на другой вопрос.   -  person vkraemer    schedule 15.06.2011


Ответы (5)


Изменение размера кучи в netbeans.conf изменяет только кучу для самого NetBeans, а не для приложений, запускаемых через NetBeans.

Правильный способ — щелкнуть правой кнопкой мыши проект и выбрать «Свойства», а затем «Выполнить»; там вы можете установить параметры виртуальной машины соответствующим образом (например, -Xmx256m). Это должно выглядеть примерно так:

установка размера кучи
(спасибо VonC за то, что нашли это изображение.)

person Michael Myers    schedule 04.04.2009
comment
Истинный. +1. Хотя, если бы я писал этот ответ, я бы включил изображение javapassion.com/handsonlabs/nbprofilermemory/index_files/ , из javapassion.com/handsonlabs/nbprofilermemory ;) (но это только я: я всегда включаю картинку) - person VonC; 04.04.2009
comment
Я всегда включаю изображение: как вы недавно заметили: stackoverflow.com/questions/707194#707206 (в комментариях) - person VonC; 04.04.2009
comment
Но как найти подходящие картинки? Я пытался найти скриншот и не смог. - person Michael Myers; 04.04.2009
comment
Проблема в том, что в категории запуска свойств проекта нет параметров виртуальной машины. Итак, я снова попал туда!! - person ; 05.04.2009
comment
@divya: Не могли бы вы дать нам скриншот или что-то в этом роде? У меня сейчас удалены все плагины веб-приложений, поэтому я не могу легко воспроизвести вашу проблему. - person Michael Myers; 05.04.2009
comment
Я не думаю, что это относится к проектам сервлетов... только к настольным проектам. - person James Schek; 07.04.2009
comment
@James Schek: Судя по сообщению Дивьи ниже, вы, видимо, правы. - person Michael Myers; 07.04.2009

Остановите сервер Tomcat, установите переменную среды CATALINA_OPTS и перезапустите Tomcat. Посмотрите в файле tomcat-install/bin/catalina.sh или catalina.bat, как используется эта переменная. Например,

set CATALINA_OPTS="-Xms512m -Xmx512m" (Windows)export CATALINA_OPTS="-Xms512m -Xmx512m" (ksh/bash)setenv CATALINA_OPTS "-Xms512m -Xmx512m" (tcsh/csh)

В catalina.bat или catallina.sh вы, возможно, заметили, что CATALINA_OPTS, JAVA_OPTS или оба могут использоваться для указания параметров Tomcat JVM.

В чем разница между CATALINA_OPTS и JAVA_OPTS?

Имя CATALINA_OPTS специфично для контейнера сервлетов Tomcat, тогда как JAVA_OPTS может использоваться другими приложениями Java (например, JBoss). Поскольку переменные среды являются общими для всех приложений, мы не хотим, чтобы Tomcat непреднамеренно использовал параметры JVM, предназначенные для других приложений. Я предпочитаю использовать CATALINA_OPTS.

Как установить размер кучи Java в JBoss?

Остановите сервер JBoss, отредактируйте $JBOSS_HOME/bin/run.conf и перезапустите сервер JBoss. Вы можете изменить строку с JAVA_OPTS на что-то вроде:

JAVA_OPTS="-server -Xms128m -Xmx128m"

Как установить размер кучи Java в Eclipse? У вас есть 2 варианта:

  1. Отредактируйте eclipse-home/eclipse.ini примерно так, как показано ниже, и перезапустите Eclipse.

    -vmargs-Xms64m-Xmx256m

  2. Или вы можете просто запустить команду eclipse с дополнительными параметрами в самом конце. Все, что следует после -vmargs, будет рассматриваться как параметры JVM и передаваться непосредственно в JVM. Параметры JVM, указанные в командной строке таким образом, всегда переопределяют параметры в eclipse.ini. Например,

    затмение -vmargs -Xms64m -Xmx256m

Как установить размер кучи Java в NetBeans?

Выйдите из NetBeans, отредактируйте файл netbeans-install/etc/netbeans.conf. Например,

netbeans_default_options="-J-Xms512m -J-Xmx512m -J-XX:PermSize=32m -J-XX:MaxPermSize=128m -J-Xverify:none

Как установить размер кучи Java в Apache Ant?

Установите переменную среды ANT_OPTS. Посмотрите в файле $ANT_HOME/bin/ant или %ANT_HOME%\bin\ant.bat, как эта переменная используется средой выполнения Ant.

set ANT_OPTS="-Xms512m -Xmx512m" (Windows)export ANT_OPTS="-Xms512m -Xmx512m" (ksh/bash)setenv ANT_OPTS "-Xms512m -Xmx512m" (tcsh/csh) 
person Rakesh    schedule 04.04.2012

Если вы увеличите виртуальную память вашего сервера Tomcat, все будет в порядке.

Шаги:

  1. В NB перейдите в меню Windows и добавьте Службы.
  2. Вы найдете Tomcat в сервисах. Щелкните правой кнопкой мыши сервер Tomcat и выберите «Свойства».
  3. Заходим в свойства платформы и пишем -Xms512m в поле VM options
person Community    schedule 06.04.2009
comment
В этом ответе описывается, как перенастроить процесс Java, созданный NetBeans для запуска контейнера сервлетов Tomcat, который представляет собой JVM, которой не хватает памяти. - person vkraemer; 15.06.2011

Я предполагаю, что увеличение памяти не решит проблему. Что делает этот MonitorFilter? Что съедает всю эту память?

Лучше всего это выяснить. Если это веб-приложение, посмотрите, можете ли вы отключить этот фильтр и работать без него. Если у вас есть успех, вы знаете, что MonitorFilter вызывает сбой.

person duffymo    schedule 04.04.2009
comment
+1 - Иногда я так увлекся ответом на вопрос, что не обращаюсь к реальной проблеме. - person Michael Myers; 04.04.2009
comment
+1 OP также обязательно должен проверить этот класс на предмет чрезмерного создания объектов и т. д. - person Dana the Sane; 04.04.2009
comment
@mmyers - +1 тебе, потому что это случается со всеми нами. 8) - person duffymo; 04.04.2009

Это не имеет ничего общего с NetBeans (ну, возможно), скорее это связано с Tomcat. Tomcat — это процесс, у которого заканчивается куча, а не NetBeans. Отследите процесс запуска вашего Tomcat. Если он связан с NB, то Tomcat скрыт в установке NB, проверьте наличие каталога «enterpriseN», где N — число, Tomcat, вероятно, находится там, и это довольно общий его дистрибутив.

Что касается того, почему монитор работает под управлением OOM, трудно сказать, это довольно простой процесс, если подумать. Вы также можете попробовать отключить HTTP-мониторинг, чтобы узнать, связана ли проблема с самим мониторингом или с вашим приложением.

person Will Hartung    schedule 05.04.2009