How to make sure that Tomcat6 reads CATALINA_OPTS on Windows?

Mulone picture Mulone · Aug 27, 2010 · Viewed 37.2k times · Source

I have a Tomcat6 running on a Windows2003 machine. I deployed 2 Grails apps on this server and I soon noticed that everything was crashing sometime after the deploy with a classic PermGen error.

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 
...

So I found a common fix for this problem: increasing heap and permgen space with:

set CATALINA_OPTS="-Xms1024m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=512m"

Added into C:\apache-tomcat-6.0.26\bin\catalina.bat. Unfortunately this didn't work, but the problem is that I'm not sure that Tomcat is picking it up. I checked various logs but these options are never printed out. Is there a way to log them and make sure that Tomcat has read them?

EDIT: I tried to add the following JVM options with tomcat6w.exe:

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

And nothing changed. I get a permGen after 2-3 minutes of uptime. Any other idea?

Cheers! Mulone

Answer

Mulone picture Mulone · Aug 30, 2010

Thank you all! I finally solved the issue by adding:

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

To the java options on tomcat6w.exe.

Thanks!