【发布时间】:2016-03-05 19:02:31
【问题描述】:
我们使用 c3p0 作为 Hibernate 中的池化库,配置如下。我们怀疑这个库中可能存在内存泄漏。我们转储应用程序的内存堆,它显示一个类型为“com.mchange.v2.c3p0.stmt.GlobalMaxOnlyStatementCache”的对象使用 2.2GB 内存(占所有内存的 61.6%),并且它继续增长直到内存耗尽。据我了解,此类用于缓存 PreparedStatements。我们的配置使用 100 作为这个值,这意味着最多应该缓存 100 条语句。
configuration
.setProperty("hibernate.c3p0.max_size", "25")
.setProperty("hibernate.c3p0.min_size", "2")
.setProperty("hibernate.c3p0.initial_pool_size", "2")
.setProperty("hibernate.c3p0.timeout", "3600")
.setProperty("hibernate.c3p0.max_statements", "100")
.setProperty("hibernate.c3p0.idle_test_period", "300")
.setProperty("hibernate.c3p0.acquire_increment", "2")
.setProperty("hibernate.c3p0.maxConnectionAge", "3600")
.setProperty("hibernate.c3p0.numHelperThreads", "6")
提前感谢您的帮助!
【问题讨论】:
-
嗨。几个简单的问题:1)你使用的是什么版本的c3p0? 2) 你可以通过 JMX 监控你的应用程序吗? c3p0 报告有关其语句缓存的大量信息,这些信息可能会有所帮助; 3) 你使用的是什么 dbms/jdbc 驱动程序?谢谢!
标签: java mysql hibernate memory-leaks c3p0