为什么我在c3p0配置后出现内存泄漏异常?

时间:2012-07-23 09:16:58

标签: java mysql tomcat memory-leaks c3p0

我正在使用java,GWT和hibernate与mysql。为了避免太多的连接异常我在我的应用程序中配置c3p0,但在配置后我将我的应用程序部署到tomcat并运行应用程序,因此在5到10之后请求应用程序崩溃并且在tomcat日志中我反复出现以下异常:

org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
SEVERE: The web application [/war] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@1d2aa39]) and a value of type [com.google.inject.servlet.ServletDefinition$2] (value [com.google.inject.servlet.ServletDefinition$2@ef3675]) but failed to remove it when the web application was stopped.Threads are going to be renewed over time to try and avoid a probable memory leak.

我的c3p0配置如下:

<property name="connection.provider_class"> org.hibernate.connection.C3P0ConnectionProvider</property>
   <property name="hibernate.connection.autoReconnect">true</property>
   <property name="hibernate.c3p0.acquire_increment">3</property>
   <property name="hibernate.c3p0.idle_test_period">5</property>
   <property name="hibernate.c3p0.max_size">50</property>
   <property name="hibernate.c3p0.max_statements">0</property>
   <property name="hibernate.c3p0.min_size">0</property>
   <property name="hibernate.c3p0.timeout">5</property>
   <property name="hibernate.c3p0.idleConnectionTestPeriod">5</property>
如果有人知道解决方案,请帮助我...... 提前谢谢..

4 个答案:

答案 0 :(得分:2)

这不是您的崩溃的原因,但其效果 - 您的应用程序因为一个未知的原因而崩溃并留下了一团糟。错误与那个混乱有关。

答案 1 :(得分:2)

这是与重新部署应用程序时发生的类加载器相关的内存泄漏。

有关此类内存泄漏的详细信息,请参阅this question

您的案例中的问题是Google Guice的a bug in the Guava dependency

答案 2 :(得分:1)

答案 3 :(得分:0)

这不是您的异常的原因,而是异常的结果。应用程序崩溃的最可能原因是代码中存在内存泄漏。在做任何事情之前,确保你的连接在finally块中正确关闭......