У меня 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
...
Итак, я нашел общее решение этой проблемы: увеличение кучи и пространства для перманента с помощью:
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 минуты безотказной работы. Есть еще идеи?
Ура! Мулоне