我有一个在 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
...
所以我找到了解决这个问题的一个常见方法:增加堆和永久空间:
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。还有什么想法吗?
干杯! 穆龙