5 messages in com.mysql.lists.javaRe: Memory leak with c3p0 using Conne...
FromSent OnAttachments
Achim Abeling01 Jun 2006 01:37.java
Mark Matthews01 Jun 2006 06:29 
Achim Abeling01 Jun 2006 06:52 
Achim Abeling02 Jun 2006 02:10 
Achim Abeling02 Jun 2006 02:37.java
Subject:Re: Memory leak with c3p0 using ConnectionProperties
From:Achim Abeling (achi@freenet-ag.de)
Date:06/02/2006 02:10:10 AM
List:com.mysql.lists.java

Hi Mark,

I think the problem is in com.mysql.jdbc.profiler.ProfileEventSink where the map CONNECTIONS_TO_SINKS is filled but elements are never removed.

How about this patch with which the Connections are garbage collected in my test case:

1. add public static synchronized void removeInstance(Connection conn) { CONNECTIONS_TO_SINKS.remove(conn); } to ProfileEventSink

2. add ProfileEventSink.removeInstance(this); to the finally block in Connection.realClose

Best regards Achim

Hi Mark,

Mark Matthews wrote:

Achim,

Adding "profileSQL=true" to your URL causes the driver to log _every_ query to System.err, or another defined logger, so depending on how your logging is setup, that could be filling a lot of memory due to how your logging system buffers things.

I am using log4j and the MySQL driver seems to log automatically to the log4j logger "MySQL" in this case. The problem occurs even if I set the loglevel for this logger to ERROR, so nothing is logged.

But the fact remains that the number of com.mysql.jdbc.Connection objects in the heap is increasing. It is not the logging system that takes the memory.

BTW: I thought the problem would occur with any property setting in the JDBC url but it seems to arise only with "profileSQL".

"profileSQL" is not designed to be used in a production setting, is there a reason you're running it in this manner?

No. I will remove it.