Как убедиться, что Tomcat6 читает CATALINA OPTS в Windows?

У меня есть Tomcat6, работающий на машине Windows2003. Я развернул приложения 2 Grails на этом сервере, и вскоре я заметил, что все рушится через некоторое время после развертывания с классической ошибкой PermGen.

java.lang.OutOfMemoryError: PermGen space
 java.lang.ClassLoader.defineClass1(Native Method)
 java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
 java.lang.ClassLoader.defineClass(ClassLoader.java:616)
 org.codehaus.groovy.reflection.ClassLoaderForClassArtifacts.de 
...

поэтому я нашел общее исправление для этой проблемы: увеличение кучи и пространства permgen с:

set CATALINA_OPTS="-Xms1024m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=512m"

добавлено в C:apache-tomcat-6.0.26bincatalina.летучая мышь. К сожалению, это не сработало, но проблема в том, что я не уверен, что Tomcat поднимает его. Я проверил различные журналы, но эти параметры никогда не распечатываются. Есть ли способ зарегистрировать их и убедиться, что Tomcat прочитал их?

EDIT: я попытался добавить следующие параметры JVM с помощью tomcat6w.exe:

-XX:+CMSClassUnloadingEnabled
-XX:+CMSPermGenSweepingEnabled 
-XX:+UseConcMarkSweepGC

и ничего не изменилось. Я получаю permGen после 2-3 минут работы. Есть другие идеи?

Ура! Мулоне

4 ответов


спасибо всем! Я наконец решил проблему, добавив:

-XX:+CMSClassUnloadingEnabled
-XX:+CMSPermGenSweepingEnabled
-XX:+UseConcMarkSweepGC
-XX:PermSize=128m
-XX:MaxPermSize=512m 

к параметрам java на tomcat6w.exe - ...

спасибо!


фактический способ сделать это (в Каталине.летучая мышь),

set "JAVA_OPTS=-Djava.awt.headless=true -server -Xms512m -Xmx2048m -XX:PermSize=512m -XX:MaxPermSize=1024m -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled"

добавьте эту строку в такое положение, чтобы этот JAVA_OPTS был передан любой команде _EXECJAVA в конце файла (если-else вложен). Я лично пишу эту строку как первый оператор этой партии


Я фактически установил их как JAVA_OPTS для моей JVM перед запуском сервера

JAVA_OPTS=-Djvmarg='-Xms1024m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=512m'

посмотрите, где вы его устанавливаете, используйте echo [statements] чтобы устранить неполадки, попробуйте установить его прямо перед его передачей на виртуальную машину, что-то вроде:

set CATALINA_OPTS="-Xms1024m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=512m"
_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% 
-Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" 
-Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" 
-Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%

убедитесь, что у вас есть право EXEC_JAVA не уверен, какая версия у вас есть, но, вероятно, несколько if заявления.

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

вы можете проверить свой максимальный размер кучи в вашем коде java, используйте:

long heapMaxSize = Runtime.getRuntime().maxMemory();

просто распечатайте его, если его правильный на основе ваших настроек, у вас есть плохая утечка памяти, если ее нет, то tomcat не поднимает его.