Подтвердить что ты не робот

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.
4b9b3361

Ответ 1

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

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

setting the heap size
(Благодаря VonC для поиска этого изображения.)

Ответ 2

Остановите сервер 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 или оба могут использоваться для указания параметров JVM Tomcat.

В чем разница между 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 варианта:

  • Отредактируйте eclipse-home/eclipse.ini, чтобы быть чем-то вроде следующего и перезапустите Eclipse.

    -vmargs-Xms64m-Xmx256m

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

    eclipse -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 runtime.

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

Ответ 3

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

Действия:

  • В NB перейдите в меню Windows и добавьте сервисы
  • Вы найдете Tomcat в сервисах. Щелкните правой кнопкой мыши на сервере Tomcat и выберите "Свойства"
  • Перейдите на платформу в свойствах и напишите -Xms512m в поле параметров VM

Ответ 4

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

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

Ответ 5

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

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