[jboss-user] [Installation, Configuration & DEPLOYMENT] - ClassLoader leak through TimedCachePolicy.resolutionTimer
huuskart
do-not-reply at jboss.com
Wed Mar 5 05:55:33 EST 2008
As far as I can see, a ClassLoader leak can occur through org.jboss.util.TimedCachePolicy.resolutionTimer, preventing ClassLoader and classes from unloading when an EAR is undeployed.
I have debugged undeploy problem in my EAR with jmap -dump and jhat, and one of the reasons preventing ClassLoader from unloading is this path I see in jhat:
Static reference from org.jboss.util.TimedCachePolicy.resolutionTimer (from class org.jboss.util.TimedCachePolicy) :
--> java.util.Timer at 0x2aa6b49830 (40 bytes) (field thread:)
--> java.util.TimerThread at 0x2aa6ac8b58 (173 bytes) (field contextClassLoader:)
--> org.jboss.web.tomcat.service.WebAppClassLoader at 0x2aa69dc338 (296 bytes) (field parent:)
--> java.net.FactoryURLClassLoader at 0x2aa69b5498 (123 bytes) (field parent:)
--> org.jboss.mx.loading.UnifiedClassLoader3 at 0x2aa5ef3ec0 (203 bytes)
The Timer object in the trace has only one TimedCachePolicy job in its queue, and that object is referenced from
org.jboss.security.plugins.JaasSecurityManager at 0x2aa6cd0fb0 (103 bytes) : field domainCache
org.jboss.security.plugins.SecurityDomainContext at 0x2aa6cd0f90 (32 bytes) : field authenticationCache
So I'm guessing that this happens: when I first access my web application requiring authentication, JBoss creates the Timer needed to clean authCache and domainCache. This Timer is created from the context of my web app -> the TimerThread java.util.Timer creates inherits the current context ClassLoader, that is my ClassLoader. Boom.
As a side issue, a peculiar thing is that I have disabled authenticationCache with
0
for JaasSecurityManagerService. Even more peculiar, the authenticationCache actually does contain the principal and credentials I used to log in to the web app. That is, authCache can't be disabled the way it is advertised.
A possible work around is to access something else, like jmx-console first, causing the Timer to be created in that context. I'll try that shortly.
There is also another ClassLoader leak that comes from Tomcat. See https://issues.apache.org/bugzilla/show_bug.cgi?id=44389
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4134171#4134171
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4134171
More information about the jboss-user
mailing list