-----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