You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Arup Vidyerthy <li...@yahoo.co.uk> on 2005/07/20 18:04:34 UTC

FW: OutOfMemoryError & WebappClassLoader.openJARs(WebappClassLoader.java:1544)

Guys,

I have been experiencing an interesting problem lately with our production
servers.

We are running Tomcat 5.5.9 with 1.4.2_08 on Gentoo box. We have around 15
contexts (identical web application for 15 separate clients) inside weapps.
Our application is very XML/XSLT oriented. Our main third party hibernate,
axis, batik, struts, velocity and bunch of apache commons stuff. I have
identified the ones that can go in the shared/lib and put the rest in
WEB-INF/lib. I have attached two text files that list these two directory
listings.

Problem is every now and then we will see an OutOfMemoryError on the box
that looks similar to this:

java.lang.OutOfMemoryError
	java.util.zip.ZipFile.open(Native Method)
	java.util.zip.ZipFile.<init>(ZipFile.java:112)
	java.util.jar.JarFile.<init>(JarFile.java:127)
	java.util.jar.JarFile.<init>(JarFile.java:92)
	
org.apache.catalina.loader.WebappClassLoader.openJARs(WebappClassLoader.java
:1544)
	
org.apache.catalina.loader.WebappClassLoader.findResourceInternal(WebappClas
sLoader.java:1763)
	
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLo
ader.java:1570)
	
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.jav
a:850)
	
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.jav
a:1299)
	
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.jav
a:1181)
	java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
	
com.mchange.v2.c3p0.impl.NewPooledConnection.handleThrowable(NewPooledConnec
tion.java:256)
	
com.mchange.v2.c3p0.impl.NewProxyStatement.executeQuery(NewProxyStatement.ja
va:52)
	
com.mchange.v2.c3p0.impl.DefaultConnectionTester.activeCheckConnection(Defau
ltConnectionTester.java:136)
	
com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1.testPooledConnection(C3P
0PooledConnectionPool.java:156)
	
com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1.refurbishResourceOnCheck
out(C3P0PooledConnectionPool.java:125)
	
com.mchange.v2.resourcepool.BasicResourcePool.attemptRefurbishResourceOnChec
kout(BasicResourcePool.java:1065)
	
com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResource
Pool.java:238)
	
com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C
3P0PooledConnectionPool.java:232)
	
com.mchange.v2.c3p0.PoolBackedDataSource.getConnection(PoolBackedDataSource.
java:94)
	
net.sf.hibernate.connection.C3P0ConnectionProvider.getConnection(C3P0Connect
ionProvider.java:33)
	
net.sf.hibernate.impl.BatcherImpl.openConnection(BatcherImpl.java:292)
	net.sf.hibernate.impl.SessionImpl.connect(SessionImpl.java:3373)
	net.sf.hibernate.impl.SessionImpl.connection(SessionImpl.java:3333)
	
net.sf.hibernate.impl.BatcherImpl.prepareQueryStatement(BatcherImpl.java:67)
	
net.sf.hibernate.loader.Loader.prepareQueryStatement(Loader.java:784)
	net.sf.hibernate.loader.Loader.doQuery(Loader.java:269)
	
net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader
.java:138)
	net.sf.hibernate.loader.Loader.doList(Loader.java:1063)
	net.sf.hibernate.loader.Loader.list(Loader.java:1054)
	net.sf.hibernate.hql.QueryTranslator.list(QueryTranslator.java:854)
	net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1554)
	net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1531)
	net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1527)
	...
	...

This to me indicates Tomcat is running out of memory when it tries to load
classes from a Jar. Has anybody seen this before? If anybody has, can you
please elaborate on it. Does it mean I I one too many jars. Bear in mind
that the libs in WEB-INF/lib directory will be loaded 15 times for 15
contexts. Is that where the problem could be coming from? Also, at this
point I thought I will tell you guys about my JVM parameters:

export JAVA_OPTS="-server -Xms512m -Xmx1000m -Xss256k"
export CATALINA_OPTS="-XX:MaxPermSize=300m -XX:+UseDefaultStackSize
-Djava.awt.headless=true"

I would be ever so greatful if anybody could shed any light or share their
experiences with me.

Kind regards...
Arup Vidyerthy