Java - OutOfMemoryError: пространство PermGen
В настоящее время я разрабатываю инструмент, позволяющий мне получать статистику из любого программного обеспечения, просто создав веб-сайт, который я также создал.
Для тех, кто не знает, Birt - это инструмент для создания отчетов и плагин eclipse.
Моя проблема заключается в следующем:
Я установил tomcat на сервер, на котором размещен мой сайт, и установил Birt ReportEngine на нем, и на моем веб-сайте я вызываю онлайн-просмотрщика для получения моих отчетов.
Проблема в том, что со вчерашнего дня, когда я запускаю отчет, у меня есть эта ошибка:
javax.servlet.ServletException: L'exécution de la servlet a lancé une exception
org.eclipse.birt.report.filter.ViewerFilter.doFilter(ViewerFilter.java:68)
Вызвано:
java.lang.OutOfMemoryError: PermGen space
Я не знаю, какой конфигурационный файл нужно изменить, чтобы избежать этой ошибки. Я нашел несколько примеров в Интернете, которые сообщают об изменении файла eclipse.ini, но что касается сайта mty, я не использую eclipse, я не нашел полезной почты.
Кто-нибудь может мне помочь?
Спасибо
Ответы
Ответ 1
Как сказал Томас, параметр для установки -XX:MaxPermSize
. Один из способов установки этого параметра для Tomcat - использовать переменную среды CATALINA_OPTS
.
Для Windows:
set CATALINA_OPTS=-Xms512m -Xmx512m -XX:MaxPermSize=256m
Для Linux (bash):
export CATALINA_OPTS="-Xms512m -Xmx512m -XX:MaxPermSize=256m"
Проверьте файлы startup.bat
и catalina.bat
или startup.sh
и catalina.sh
в каталоге tomcat/bin и добавьте туда вышеприведенные команды.
(Параметры Xmx и Xms устанавливают минимальный и максимальный размер для кучи Java - там хранятся объекты. Это не проблема, которую вы имеете, но я включил их для полноты.)
Ответ 2
Вам не нужно добавлять следующую строку в eclipse.ini
-XX:MaxPermSize=128m
Если проблема повторится, попробуйте увеличить значение. Вы также можете добавить следующие дополнительные строки:
-XX:+UseConcMarkSweepGC
-XX:+CMSClassUnloadingEnabled
-XX:+CMSPermGenSweepingEnabled
-XX:+UseParNewGC
Это изменяет сборщик мусора JVM на более оптимизированный, а также может улучшить производительность и использование памяти.
Вы также можете настроить значения параметров -Xmx
и Xms
. Попробуйте небольшое увеличение (то же самое с -XX:MaxPermSize
), поскольку это увеличит объем памяти вашей JVM.
Более подробные сведения см. здесь:
http://www.eclipsezone.com/eclipse/forums/t61618.html
Полный список параметров и параметров JVM:
http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html
Ответ 3
Используйте эту опцию JVM: -XX:MaxPermSize=256m
(конечно, вы можете выбрать объем памяти, но IIRC по умолчанию будет 64 м, поэтому вам нужно будет увеличить его). - Обратите внимание, что это для Oracle JVM (ранее SUN:)), у других JVM могут быть разные варианты.
Кроме этого, попробуйте не слишком интенсивно развертывать, поскольку это может также увеличить использование пространства PermGen (JBoss, который включает Tomcat, так как имеет эту проблему, но я не уверен, что это верно для автономного Tomcat).
Ответ 4
Это можно решить, выделив больше памяти кучи.
это можно сделать так:
шаги:
дважды щелкните по серверу eclipse- > открыть конфигурацию запуска- > Аргументы- > вставьте эту строку в текстовую область аргументов vm: -
-XX: MaxPermSize = 512M -Xmx1024M
Это решит вашу ошибку outofmemory.
Ответ 5
Я добавил следующую строку линии в eclipse.ini и отлично работал у меня.
-startup
plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.0.200.v20090519
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256m
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx512m
-XX:MaxPermSize=256m