Cannot get a connection, pool error Timeout waiting for idle object
我的应用经常过了一段时间出现Cannot get a connection, pool error Timeout waiting for idle object我怀疑是我哪边的连接使用不当,有点hold不住。可是项目那么多 使用数据库的地方,我要怎么来定位可能出错的地方呢??有没有高手曾经见到过类似的问题呀!指教一二哈!多谢多谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
这个问题要怎么解决呢?
嗯。呵呵,问题比较隐性丫
回复
仔细的看了下代码,发现这个方法形成了数据的死锁,第一次获得的数据库连接对一条数据进行update(没有提交),然后再获得一个连接对同一条数据进行update,结果就死锁了,外带这两个数据库连接也不释放。
我也遇到了这个问题,这个项目上线运营已经很久了,最近才冒出这个问题,我查看了代码确实存在一个方法中得到了一个数据库的连接之后没有释放,然后在这个方法中执行的一个方法里又去申请获得数据库,我修改了代码打印了日志,明天更新项目,继续跟踪吧。
嗯,多谢提醒哈!
如果你的应用里面有这种用法,赶紧改了把。不改怎么调参数都不能根本解决问题。
至于你说的多次传递引用,我的观点是:一个DB连接用完了就赶紧释放,不要占用太长的时间。如果连接占用时间过长,会影响你整个系统的稳定性。毕竟池子里面就那么多连接。
最后一点个人的感受:最好不要直接用DBCP。对程序员有很多要求。需要大家沟通好。一旦你的程序写的有问题,调试起来麻烦。低级一点的用DBUtils,高级一点的用mybatis或者hibernate。
把转接池参数minIdle调大点。其它的参数也可以试着调调。
嗯,我也是这么想的。我去查看了,确实存在这样的问题。不过想问一下,就是如果我一直是一个连接,通过多次传递引用,会不会造成什么问题呢?
你是在用DBCP吗? 你的逻辑里面是否有下面这些的情况: 方法A里面获得一个连接,然后做一些DB操作。然后释放该连接。但是方法A里面调用了方法B。方法B的逻辑和方法A的类似。
这样有可能出现:一个连接在没有被释放的情况下,又去申请一个新连接。运行一段时间之后连接池耗光。就会出现类似的问题。