Bertrand Guay-Paquet <ber...@step.polymtl.ca> schrieb:

>Hello,
>
>I'm using Tomcat 7.0.34 via TomEE 1.5.1 with MySQL. I noticed a memory 
>leak in my web application which uses jdbc connection pooling with 
>Tomcat's jdbc-pool.
>
>The com.mysql.jdbc.JDBC4Connection class has a field named 
>"openStatements" which holds, as you can imagine, open sql statements. 
>This structure grows continuously over time and no statements are ever 
>released. I stepped into my code to verify that I closed opened 
>statements and it is the case.
>
Have you looked at 
http://grokbase.com/t/openejb/users/13135d2a0v/jdbc-connection-pool-memory-leak 
? It seems like your problem.

Regards
Felix

>Digging some more, I downloaded Tomcat's source and it seems that 
>jdbc-pool discards all calls to java.sql.Statement.close() in 
>StatementDecoratorInterceptor#invoke(Object proxy, Method method, 
>Object[] args)
>
>I see what could be a bug in StatementCache#closeInvoked() which is 
>called by the above method. Here is the code with my own comments
>added:
>@Override
>public void closeInvoked() {
>     boolean shouldClose = true;
>     if (cacheSize.get() < maxCacheSize) {
>         // omitted for brievety
>     }
>     closed = true;
>     // [1] I think "delegate = null" is done too soon
>     delegate = null;
>     if (shouldClose) {
>         // check its body below
>         super.closeInvoked();
>     }
>}
>
>// This is super.closeInvoked()
>public void closeInvoked() {
>     if (getDelegate()!=null) {
>         // never true when coming from
>         // StatementCache#closeInvoked()
>         // because of [1]
>         try {
>             getDelegate().close();
>         }catch (SQLException ignore) {
>         }
>     }
>     closed = true;
>     delegate = null;
>}
>
>Regards,
>Bertrand
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>For additional commands, e-mail: users-h...@tomcat.apache.org



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

Reply via email to