Tomcat Tips
java.lang.OutOfMemoryError: PermGen space
This error seems to occur if using CGLIB and the Sun JVM under Tomcat. A lump of PermGen memory space is lost each time an application is deployed. It can be alleviated by increasing the maximum amount of memory available for the PermGen memory space. Add the following option to the JVM arguments in catalina.sh. Note: This option only applies to the Sun JVM. The options are likely to differ for other JVM implementations.
JAVA_OPTS="$JAVA_OPTS -Xmx256m -XX:MaxPermSize=128m"
or even better, try these options which alleviate the problem considerably
JAVA_OPTS="$JAVA_OPTS -Xmx256m -XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=128m"
See:
- http://blogs.sun.com/fkieviet/entry/classloaderleaksthedreadedjava
- http://blogs.sun.com/fkieviet/entry/howtofixthedreaded
- http://my.opera.com/karmazilla/blog/2007/03/13/good-riddance-permgen-outofmemoryerror
- http://www.alessandroribeiro.com/?q=en/node&page=1
URI Encoding
Tomcat's default URI encoding is ISO-8859-1. To change this to UTF-8, add an URIEncoding attribute of 'UTF-8' to server.xml.
<Server ... >
...
<Service name="Catalina">
...
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true"
URIEncoding="UTF-8"/>
...
More information at http://tomcat.apache.org/tomcat-5.5-doc/config/http.html
Debian Tomcat 5.5
Logging
Ordinarily, Tomcat redirects all text written to stdout to catalina.out. The Debian 4.0 (Etch) Tomcat package redirects catalina.out to catalina_yyyy-mm-dd.log and uses logrotate to rotate the logs.
/var/lib/tomcat55/conf/logging.properties controls what is written to separate logs for each class-loader using java util logging. See the Tomcat documentation on logging to change the configuration.
In general, if you want to see stdout, tail catalina_yyyy-mm-dd.log (note the underscore), but if you only want to monitor Tomcat, tail catalina.yyyy-mm-dd.log (note the dot). If an application fails to deploy, look in localhost.yyyy-mm-dd.log for error messages.
Use log4j in your own application, and tail the specific log to debug your application.
See 'Taxonomy of class loader problems encountered when using Jakarta Commons Logging' re classloading problems with Apache Commons Logging
Mail Server Configuration
http://wheelersoftware.com/articles/spring-javamail-2.html
Suppressing Stack Traces on HTTP 500 Errors
References
-- Frank Dean - 18 Jul 2011
-- Frank Dean - 29 Aug 2007