[jboss-dev-forums] [Design of JBoss Profiler] - Redeployment Class Leak in commons logging ?
deas0815
do-not-reply at jboss.com
Sat Aug 26 05:30:26 EDT 2006
Hallo everybody,
even though my story is not directly related to jboss-profiler, I'm
posting it here as I hope experienced memory-leak tacklers are
around. :)
I'm running jboss-4.0.4 on jdk 1.5 with ejb3 clustering enabled. I
have an isolated (ear) application coming with the hibernate 3.2.0cr3
and most of the libraries hibernate depends upon bundled in order to
avoid class leakage caused by static references from classes not
bundled with the application.
Unfortunately, I found that I'm still "suffering" from a redeployment
memory leak in the permanent generation, so I tried to locate the
cause using several memory profilers (jboss-profiler was among them
:). In the end, the "picture" provided by the profiler coming with jdk
6 (jhat) provided the clearest picture (to me) so far. It showed that
there where two WeakHashMaps left refencing the ears UCL.
The first one looks jvm internal and hence ok to me:
Static reference from com.sun.naming.internal.ResourceManager.propertiesCache (from class com.sun.naming.internal.ResourceManager) :
--> java.util.WeakHashMap at 0x96c95258 (44 bytes) (field table:)
--> [Ljava.util.WeakHashMap$Entry;@0x97a8dea8 (264 bytes) (Element 45 of [Ljava.util.WeakHashMap$Entry;@0x97a8dea8:)
--> java.util.WeakHashMap$Entry at 0x980e20d8 (36 bytes) (field referent:)
--> org.jboss.mx.loading.UnifiedClassLoader3 at 0x97f1d7e8 (107 bytes)
The second one held by org.apache.commons.logging.LogFactory seems suspicious:
Static reference from org.jboss.resource.connectionmanager.PoolFiller.filler (from class org.jboss.resource.connectionmanager.PoolFiller) :
--> org.jboss.resource.connectionmanager.PoolFiller at 0x97876fb8 (16 bytes) (field fillerThread:)
--> java.lang.Thread at 0x97876f30 (104 bytes) (field contextClassLoader:)
--> org.jboss.mx.loading.UnifiedClassLoader3 at 0x966708c0 (107 bytes) (field classes:)
--> java.util.Vector at 0x96690400 (24 bytes) (field elementData:)
--> [Ljava.lang.Object;@0x97e3b2a0 (10248 bytes) (Element 166 of [Ljava.lang.Object;@0x97e3b2a0:)
--> class org.apache.commons.logging.LogFactory (84 bytes) (static field factories:)
--> java.util.Collections$SynchronizedMap at 0x96a6e8c0 (28 bytes) (field m:)
--> java.util.WeakHashMap at 0x96b4e458 (44 bytes) (field table:)
--> [Ljava.util.WeakHashMap$Entry;@0x96b68330 (72 bytes) (Element 13 of [Ljava.util.WeakHashMap$Entry;@0x96b68330:)
--> java.util.WeakHashMap$Entry at 0x97f6b358 (36 bytes) (field referent:)
--> org.jboss.mx.loading.UnifiedClassLoader3 at 0x97f1d7e8 (107 bytes)
I don't know how and when LogFactory is supposed to release the UCL,
but it does not seem to happen for me. Looking at the jboss source, I
found a call to LogFactory.release(...) in WebCtXLoader - and nowhere
else.
Are we missing this call somewhere else and am I suffering from a bug
related to commons logging ?
regards
Andreas
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3967625#3967625
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3967625
More information about the jboss-dev-forums
mailing list