2012-10-25 38 views
2

我使用的是c3p0(0.9.1.2)版本,一小时左右后我看到numUnclosedOrphanedConnections以每小时1次的速度缓慢增加。 c3p0 docs said为什么c3p0中的numUnclosedOrphanedConnections增加?

numUnclosedOrphanedConnections将只在softReset()调用 后非零。它表示在发生软重置时检出的 的连接数,因此从池中排除了 ,并且其仍未被客户端 应用程序关闭。

为什么c3p0正在进行软复位?我的c3p0设置就像

initialPoolSize=1 
minPoolSize=1 
maxPoolSize=100 
maxIdleTime=60 
checkoutTimeout=5000 
testConnectionOnCheckin=true 
+0

你跑什么样的环境?你跟踪numUnclosedOrphanedConnections vi JMX或编程?你有没有修改任何c3p0属性? (这样做会导致池的softReset(),以便修改后的属性值可以采用。)另一个需要注意的事情是如何关闭连接。 unclosedOrphanedConnections的单调上升表明Connections正在泄露。 –

+0

我正在运行一个64位的Linux机器。 Jdk版本1.6.0_31。我正在通过JMX手动跟踪它。 c3p0属性不会被修改。有跟踪c3p0连接泄漏的好工具吗? –

+0

是的。请参阅config params unreturnedConnectionTimeout和debugUnreturnedConnectionStackTraces(请参阅http://www.mchange.com/projects/c3p0/)注意,您必须将这些属性的BOTH设置为获取泄漏的堆栈痕迹。你是在自己的应用中嵌入c3p0,还是通过更大的库/应用服务器(hibernate,spring等)运行它?另一件事,只是为了让我感觉更好,是升级到最新版本,c3p0-0.9.2-pre5我不记得任何问题,可以解释你神秘的软复位,但自0.9.1以来改变了很多 –

回答

0

谢谢史蒂夫帮我修复它。这是我做到的。

启用C3PO调试级日志记录:

<logger name="com.mchange" additivity="false"> 
<level value="DEBUG" /> 
    <appender-ref ref="C3p0Appender" />   
</logger> 

C3P0设置:

debugUnreturnedConnectionStackTraces=true 
# 30 sec is enough for me but you should change it for your case 
unreturnedConnectionTimeout=30 

和关键词里面C3P0日志文件中搜索为: “逾期资源退房”

此日志记录仅在c3p0的中继版本中启用。它应该在pre6发布。