我在Windows2003计算机上运行了Tomcat6。我在此服务器上部署了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已读取它们?
编辑:我试图与tomcat6w.exe添加以下JVM选项:
-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:+UseConcMarkSweepGC
并没有改变。2-3分钟的正常运行时间后,我得到了permGen。还有其他想法吗?
干杯! 慕罗尼
谢谢你们!我终于通过添加以下内容解决了该问题:
-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:+UseConcMarkSweepGC -XX:PermSize=128m -XX:MaxPermSize=512m
到tomcat6w.exe上的Java选项。
谢谢!