如何确保Tomcat6在Windows上读取CATALINA_OPTS?

Mul*_*one 6 grails logging tomcat permgen

我在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 
...
Run Code Online (Sandbox Code Playgroud)

所以我找到了解决这个问题的常见方法:增加堆和permgen空间:

set CATALINA_OPTS="-Xms1024m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=512m"
Run Code Online (Sandbox Code Playgroud)

添加到C:\ apache-tomcat-6.0.26\bin\catalina.bat中.不幸的是,这不起作用,但问题是我不确定Tomcat是否正在接收它.我检查了各种日志,但这些选项从未打印出来.有没有办法记录它们并确保Tomcat已经读过它们?

编辑:我尝试使用tomcat6w.exe添加以下JVM选项:

-XX:+CMSClassUnloadingEnabled
-XX:+CMSPermGenSweepingEnabled 
-XX:+UseConcMarkSweepGC
Run Code Online (Sandbox Code Playgroud)

没有任何改变.在2-3分钟的正常运行时间后,我得到一个permGen.还有其他想法吗?

干杯! Mulone

Mul*_*one 6

谢谢你们!我终于通过添加:

-XX:+CMSClassUnloadingEnabled
-XX:+CMSPermGenSweepingEnabled
-XX:+UseConcMarkSweepGC
-XX:PermSize=128m
-XX:MaxPermSize=512m 
Run Code Online (Sandbox Code Playgroud)

到tomcat6w.exe上的java选项.

谢谢!


Abh*_*jee 5

实际的方法(在 Catalina.bat 中),

set "JAVA_OPTS=-Djava.awt.headless=true -server -Xms512m -Xmx2048m -XX:PermSize=512m -XX:MaxPermSize=1024m -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled"
Run Code Online (Sandbox Code Playgroud)

将此行添加到这样的位置,以便将此 JAVA_OPTS 传输到文件末尾的任何 _EXECJAVA 命令(if-else 嵌套)。我个人将这一行写为该批次的第一条语句