Как убедиться, что Tomcat6 читает CATALINA_OPTS в Windows? - PullRequest
6 голосов
/ 27 августа 2010

У меня 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.26 \ bin \ catalina.bat. К сожалению, это не сработало, но проблема в том, что я не уверен, что Tomcat его подхватит. Я проверял различные журналы, но эти параметры никогда не распечатывались. Есть ли способ зарегистрировать их и убедиться, что Tomcat их прочитал?

РЕДАКТИРОВАТЬ: я попытался добавить следующие параметры JVM с tomcat6w.exe:

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

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

Ура! Mulone

Ответы [ 4 ]

6 голосов
/ 30 августа 2010

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

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

К параметрам Java на tomcat6w.exe.

Спасибо!

4 голосов
/ 17 февраля 2014

Фактический способ сделать это (в Catalina.bat),

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

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

1 голос
/ 27 августа 2010

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

JAVA_OPTS=-Djvmarg='-Xms1024m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=512m'
0 голосов
/ 27 августа 2010

Посмотрите, где вы его устанавливаете, используйте 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 неубедитесь, какая у вас версия .bat файла, но, возможно, несколько операторов if.

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

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

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

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

...