[转载]跟踪 c3p0 连接池连接泄漏

跟踪 c3p0 连接池连接泄漏

 

最近的项目碰到了连接泄漏的问题。 项目用的是Spring + Hibernate + c3p0,具体表现为,系统

运行一段时间后,用户打开登录页后,执行登录无响应,查看后台日志,提示Could not open

Connection。将c3p0日志级别调成debug之后,发现c3p0报告连接数已经达到设置的上限。 之前检

查连接泄漏时,使用的是极低效的办法,目测代码,所以问题解决起来颇费周折,效果还不好。 今

天查了一下c3p0官方手册,c3p0官方提供了两个参数,能够很方便的检查没有正确返回连接池的连

接。
 
debugUnreturnedConnectionStackTraces
 默认为false,如果此参数设置为true,当所有连接用完的时候,会以堆栈信息显示哪些代码使用

了连接。由于跟踪连接状态会产生额外的消耗,如果程序稳定,应该将此参数恢复为默认值false。
 
unreturnedConnectionTimeout
 设置连接被checkout后,经过多长时间还未返还连接池,则连接缓冲池直接Kill该连接,此时,结

合debugUnretrunedConnectionStackTraces,我们可以知道是什么程序持有了连接,并且没有返回

。这个方法很暴力,有可能造成应用程序不稳定,所以,如果真的出现了连接泄漏,一时半会又找

不到问题点所在,可以暂时使用这个方法让应用程序跑起来。
 
参考:c3p0官方手册

猜你喜欢

转载自blog.csdn.net/iamkarl/article/details/6399665