-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

All,

On 9/17/14 3:55 PM, Christopher Schultz wrote:
> I'm running Tomcat 8.0.9 on Mac OS X under Oracle's Java 7
> jdk1.7.0_65.
> 
> For a long time, I've had a cleanly reloading web application,
> meaning that after my web application is reloaded (say, during
> development), the old WebappClassLoader is available for GC.
> 
> After switching to Tomcat 8.x in my development environment, I've 
> noticed that I can't cleanly reload anymore. Using YourKit, I've 
> traced the reference to my WebappClassLoader to DBCP2.
> 
> I have a JNDI DataSource whose JDBC driver is loaded from Tomcat's 
> CATALINA_HOME/lib directory.
> 
> It seems that org.apache.tomcat.dbcp.pool2.impl.GenericObjectPool
> has a member, factoryClassLoader, which points to my
> WebappClassLoader. I believe that it will likely retain that
> reference after multiple reloads, so I'm only leaking a single
> WebappClassLoader.

After a couple of re-loads, I can see that I'm getting each
WebappClassLoader pinned in memory by the same object graph. So that
means it's a pretty significant leak. I'll upgrade to 8.0.latest to be
sure I've got the best version.

Interestingly enough, GenericObjectPool contains a
"creationStackTrace" member. Here's its value for one of the instances:

java.lang.Exception
        at
org.apache.tomcat.dbcp.pool2.impl.BaseGenericObjectPool.<init>(BaseGenericObjectPool.java:134)
        at
org.apache.tomcat.dbcp.pool2.impl.GenericObjectPool.<init>(GenericObjectPool.java:104)
        at
org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionPool(BasicDataSource.java:2067)
        at
org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:1919)
        at
org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getLogWriter(BasicDataSource.java:1467)
        at
org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory.createDataSource(BasicDataSourceFactory.java:439)
        at
org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory.getObjectInstance(BasicDataSourceFactory.java:182)
        at
org.apache.naming.factory.FactoryBase.getObjectInstance(FactoryBase.java:94)
        at
javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:841)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:152)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:829)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:166)
        at
org.apache.catalina.core.NamingContextListener.addResource(NamingContextListener.java:1084)
        at
org.apache.catalina.core.NamingContextListener.createNamingContext(NamingContextListener.java:663)
        at
org.apache.catalina.core.NamingContextListener.lifecycleEvent(NamingContextListener.java:256)
        at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
        at
org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
        at
org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5083)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at
org.apache.catalina.core.StandardContext.reload(StandardContext.java:3780)
        at
org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:293)
        at
org.apache.catalina.core.StandardContext.backgroundProcess(StandardContext.java:5539)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1365)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1369)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1369)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1345)
        at java.lang.Thread.run(Thread.java:745)

- -chris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
Comment: GPGTools - http://gpgtools.org

iQIcBAEBCAAGBQJUGel5AAoJEBzwKT+lPKRY+r4P/2Cs+2ryN/5fTOg5uJd+5aUO
XKmX95M80se7XLpFK+DHC5642/DxxMN4Ck4v4D8Pupp/jxMEDPR554fmVFjGUt9p
2qwqnisydKfP28mPooxI3QUt/Ql0U/qpvXQxAFdzLohKNDeRqMKYQm9/79TcT+hs
zm8DjT+Qj2XU1tmHhNieVj1wLC50IFmzFwFcddQ8s6iHWSrD84eZnQ6Hbjju1gau
G2Sgxe3mBILuRxFsfSfwTVVCG6xCK3DCn+V6oaRWpwy2R5gG5vh3WI1goAak10Dn
z7Bq9zoX8jRObYveFoUQ2M0e/5MmxifbiY3IC1BYpr9bKLcCYNJWK01wKWWHSDR4
I8RPiufBoOq12KX+1Grlzb2P8wt1Ih6DeMb1+qpiWfa1e+tlfFO4iCIofXu2+G21
VuzcI30uERcD3pChUMnRcPL5ygtOhZvO24tSA3dm5ddwzvvuFyovavdyAT71tugI
+m1KQB+Vz3LR/SjSPNGLZ1BlqSjkenbti7LPsd4Kpld7ZK7oJYr8jgNJJwy5MbmS
/YZPulFAMvOhwKVVBgdI4VFfjOtey7rLiXiOSnDlVrmHfvHwNkyEKQHsvvTomsSF
3kgZ4HRh2OSKE5Y1RlyQlPuPafApvof34vDtzK1AwcrVIvQPmVNycgc4zfLTrM81
MRo3kI6jY5Fa2gAD16uq
=A+zu
-----END PGP SIGNATURE-----

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to