java技术研究

统计

留言簿(3)

阅读排行榜

评论排行榜

c3p0搞的连接池怎么老是死掉啊(转)

哈哈!这个问题在我们公司也发生过。经过几天研究终于搞定。

c3p0的connection实现类和我们想象中有出入,最大的出入就是c3p0的connection实现类的close方法不是真的将该链接释放掉,而是将这个链接回收到可用连接池中。于是问题就来了。

c3p0的有一个maxConnection的参数,即最多链接数。还有一个genratNum,即当链接不够用的时候自动每次生成链接的个数。假如将最大连接数设定为50,每次增长数设定为10,初始值为10。假如当前总共产生的链接数已经有49个,但是这49个链接不是可用连接数,那么c3p0就会增长10个。这样一共就产生了59个。

假如你设定最大空闲时间又过长,如一个月,那么就是被close的链接,也不会被释放掉,一直保留链接池中。

所以很快c3p0就将数据库的链接用完。

 

解决办法是:

    1. 在代码中当创建了一个connection(或者从池中取),必须在要在合适的时机将该链接close掉。

    2. 合理配置最大连接数,最大空闲时间,每次增长数

    3. 可以通过实行ConnectionCustomer接口,来显式的对链接进行关闭,释放资源的操作。

    4. 第一点是最重要的,后两点是辅助的。


转自:http://www.oschina.net/question/242388_40477

posted on 2012-09-04 16:48 小秦 阅读(1131) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: