java.lang.OutOfMemoryError: пространство кучи Java с NetBeans - PullRequest
15 голосов
/ 04 апреля 2009

Это ошибка, которую я получаю, когда запускаю свое веб-приложение в экземпляре контейнера сервлета 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.

Ответы [ 5 ]

30 голосов
/ 04 апреля 2009

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

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

setting the heap size
(Спасибо VonC за поиск этой картинки.)

9 голосов
/ 04 апреля 2012

Остановите сервер 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) 
7 голосов
/ 06 апреля 2009

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

Шаги:

  1. В NB зайдите в меню Windows и добавьте Сервисы
  2. В услугах вы найдете Tomcat. Щелкните правой кнопкой мыши на сервере Tomcat и выберите Свойства
  3. Перейдите на платформу в свойствах и напишите -Xms512m в поле опций VM
5 голосов
/ 04 апреля 2009

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

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

3 голосов
/ 05 апреля 2009

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

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

...