Cannot get a connection, pool error Timeout waiting for idle object

helloTK 发布于 2012/08/14 13:34
阅读 33K+
收藏 4
我的应用经常过了一段时间出现Cannot get a connection, pool error Timeout waiting for idle object我怀疑是我哪边的连接使用不当,有点hold不住。可是项目那么多 使用数据库的地方,我要怎么来定位可能出错的地方呢??有没有高手曾经见到过类似的问题呀!指教一二哈!多谢多谢!
加载中
0
ilxlf
ilxlf

    你是在用DBCP吗? 你的逻辑里面是否有下面这些的情况: 方法A里面获得一个连接,然后做一些DB操作。然后释放该连接。但是方法A里面调用了方法B。方法B的逻辑和方法A的类似。

    这样有可能出现:一个连接在没有被释放的情况下,又去申请一个新连接。运行一段时间之后连接池耗光。就会出现类似的问题。

helloTK
helloTK
嗯,我也是这么想的。我去查看了,确实存在这样的问题。不过想问一下,就是如果我一直是一个连接,通过多次传递引用,会不会造成什么问题呢?
0
喜之郎
喜之郎
把转接池参数minIdle调大点。其它的参数也可以试着调调。
0
ilxlf
ilxlf

    如果你的应用里面有这种用法,赶紧改了把。不改怎么调参数都不能根本解决问题。

    至于你说的多次传递引用,我的观点是:一个DB连接用完了就赶紧释放,不要占用太长的时间。如果连接占用时间过长,会影响你整个系统的稳定性。毕竟池子里面就那么多连接。

    最后一点个人的感受:最好不要直接用DBCP。对程序员有很多要求。需要大家沟通好。一旦你的程序写的有问题,调试起来麻烦。低级一点的用DBUtils,高级一点的用mybatis或者hibernate。

helloTK
helloTK
嗯,多谢提醒哈!
0
蔡文源
蔡文源

我也遇到了这个问题,这个项目上线运营已经很久了,最近才冒出这个问题,我查看了代码确实存在一个方法中得到了一个数据库的连接之后没有释放,然后在这个方法中执行的一个方法里又去申请获得数据库,我修改了代码打印了日志,明天更新项目,继续跟踪吧。

蔡文源
蔡文源
回复 @朱丽娟 : 仔细的看了下代码,发现这个方法形成了数据的死锁,第一次获得的数据库连接对一条数据进行update(没有提交),然后再获得一个连接对同一条数据进行update,结果就死锁了,外带这两个数据库连接也不释放。
helloTK
helloTK
嗯。呵呵,问题比较隐性丫
0
简单同学
简单同学
这个问题要怎么解决呢?
返回顶部
顶部