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

Что делать с пространством Tomcat PermGen

ПРЕДПОСЫЛКИ. У меня есть веб-проект, в котором используется JSP. IDE - Eclipse. Конфигурация tomcat: Автоматически публиковать, когда ресурсы меняются, а интервал публикации - "1 секунда".

Файл свойств в папке классов, который использовался для сохранения некоторых параметров. Он также может быть динамически модифицирован сервлетом. Операция изменения триггера сохраняется кнопкой сохранения в JSP.

ПРОБЛЕМА. После нескольких операций сохранения Tomcat поставляется с java.lang.OutOfMemoryError: PermGen space.

СООБЩЕНИЕ СООБЩЕНИЙ

java.lang.OutOfMemoryError: PermGen space
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1815)
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:872)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1325)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
    at org.apache.catalina.startup.WebAnnotationSet.loadApplicationServletAnnotations(WebAnnotationSet.java:108)
    at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:58)
    at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:297)
    at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:1064)
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:261)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4238)
    at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3083)
    at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:404)
    at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1279)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1571)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1580)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1580)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1560)
    at java.lang.Thread.run(Thread.java:662)
4b9b3361

Ответ 1

Tomcat действительно нуждается в большом количестве пергентов. 512m не является необоснованным макс. Однако это только задерживает утечку горячего развертывания. Permgen будет расти ~ 25 мб на hotdeploy, что в Eclipse может быть каждый раз, когда вы сохраняете файл Java. 512m быстро исчезает, если у вас есть Ctrl + S, вроде меня.

Решение: разрешить Java удалять определения классов из памяти, т.е. мусорный сбор байтового кода. Добавьте их вместе с увеличенным размером пергентов:

-XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC

Ответ 2

Вы можете установить переменную среды с именем: "JAVA_OPTS" и установить ее значение следующим образом -Xms256m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m

Ответ 3

ДЛЯ ECLIPSE

  • Перейти к свойствам сервера
  • Перейти на платформу
  • Теперь в аргументе VM напишите это -Xms256m -Xmx256m -XX: PermSize = 256 м -XX: MaxPermSize = 512 м

ДЛЯ NETBEANS

  • Перейдите в папку Netbeans/etc/
  • открыть файл netbeans.config в любом редакторе
  • отредактируйте эту строку как

netbeans_default_options = "- J-client -J-Xss256m -J-Xms256m -J-XX: PermSize = 256m -XX: MaxPermSize = 512m -J-Dapple.laf.useScreenMenuBar = true - J-Dapple.awt.graphics.UseQuartz = true -J-Dsun.java2d.noddraw = true -J-Dsun.java2d.dpiaware = true -J-Dsun.zip.disableMemoryMapping = true"

Thats all

Ответ 4

например:

-Xms128m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256m

enter image description here

Ответ 5

Сервер Tomcat запускает разные JAVA, а eclipse работает в разных JAVA.

Поэтому добавление -XX:MaxPermSize=512m в eclipse.ini поможет решить эту проблему. Следуйте приведенным ниже инструкциям, чтобы добавить это на сервер tomcat:

  • Дважды щелкните сервер в eclipse

  • открыть конфигурацию запуска

  • добавьте "-XX: MaxPermSize = 512m" в аргументы VM на вкладке "Аргументы".

Ответ 6

Просто добавьте для Windows, если кто-то все еще застрял: -

  • Откройте файл Catalina.bat(расположенный в папке установки /bin установки Apache tomcat)
  • Задайте JAVA_OPTS следующим образом в самом начале (до того, как оно будет сначала использовано в любом месте файла): -

    установить JAVA_OPTS = -Dfile.encoding = UTF-8 -Xms128m -Xmx1024m -XX: PermSize = 64m -XX: MaxPermSize = 256m

  • Перезапустите Tomcat и сделайте это.

Вы можете найти приятное объяснение здесь