You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-user@logging.apache.org by Ceki Gülcü <ce...@qos.ch> on 2004/09/22 15:10:09 UTC

RE: web app using log4j not garbage collected when shutdown with tomcat manager app

At 02:45 PM 9/22/2004, you wrote:
>Ceki,
>
>I think I've found a workaround for this problem.
>
>Debugging the log4j property configuration code when executing test case 
>3, I noticed it used the java.beans package in PropertySetter to set the 
>ConversionPattern property of the appender layout object.  This code 
>doesn't get executed in the other testcases because no Layout parameters 
>(including ConversionPattern) are specified (at least not specified via 
>the configuration file).
>
>After googling a bit on "Inspector", "memory", "leak" I found a few clues 
>that led to the inspection of the java.beans.Introspector class.  This 
>class includes the following comment in its javadoc:
>
>  * Because the Introspector caches BeanInfo classes for better performance,
>  * take care if you use it in an application that uses
>  * multiple class loaders.
>  * In general, when you destroy a <code>ClassLoader</code>
>  * that has been used to introspect classes,
>  * you should use the
>  * {@link #flushCaches <code>Introspector.flushCaches</code>}
>  * or
>  * {@link #flushFromCaches <code>Introspector.flushFromCaches</code>} method
>  * to flush all of the introspected classes out of the cache.
>
>I then added a call to Introspector.flushCaches() in 
>SimpleServlet.destroy() after the call to LogManager.shutdown().  With 
>this additional line of code, test case 3 is now successful - the web app 
>classes and the tomcat web app class loader are now garbage collected.
>
>
>Does this seem like a reasonable explanation/solution?  This doesn't 
>appear to be a log4j issue (I hope I didn't cause anyone any extra 
>work).  I would guess that maybe Tomcat should call 
>Introspector.flushCaches() when it shuts down a web app since it's 
>throwing away the classloader for the web app.  For now, I'll include this 
>line of code during web app shutdown.

This makes perfect sense. Due to the presence of the ConversionPattern 
property, Test 3 is the only time PropertyConfigurator will use 
introspection, hence the failure in garbage collection of the web-app.

Good call!

>Hope this helps,

It sure does.

>-Jay

-- 
Ceki Gülcü

      For log4j documentation consider "The complete log4j manual"
      ISBN: 2970036908 http://www.qos.ch/shop/products/clm_t.jsp  



---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@logging.apache.org