Druid一段时间没操作再操作时,查询很慢,并且随着次数增加,报连接溢出
@fei33423 你好,想跟你请教个问题:我数据库使用的是oralce,连接池使用druid,一段时间未操作,testWhileIdle验证会出现超过20秒,主要在skip not validate connection,并且伴随着物理连接未关闭。导致越积越多,最终报连接溢出:com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 60000, active 100, maxActive 100。麻烦大神点拨下。
我maxActive配置的是100,每次慢查情况出现的时候,就有连接未关闭,导致越积越多,最终超过100个,报溢出
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
可是,我这边物理连接关闭越积越多,最张导致报连接溢出
回复
@JumpAlang : 如果是开发代码,方便做测试的话,对真实的数据库数据源DataSource代理一下,然后通过Wrapper对物理Connection包装一下,在连接泄露以后,通过代码去检查一下,这几个泄露的数据库连接都是什么状态,再往后可能就需要跟druid的源码了。。。。
回复
druid,配置不是有个removeAbandon参数,可以移除长时间未被关闭的连接,然后记录日志。我配置了这个根本没用
回复
@JumpAlang : 我的堆积到了900,然后就出现了响应超级慢的情况(10分钟吧),不知道怎么搞
网上的回答:
数据库服务器的防火墙会自动中断一段时间未活动的TCP连接,相当于中断了数据库物理连接,Druid连接池中维护的数据库逻辑连接尝试与数据库服务器进行被服务器单方面中断的连接进行TCP通信,会失败(Druid把异常捕获了。只返回false,然后Druid再新开一个TCP连接),重要的是这个失败的过程耗时很长
这个靠谱
我在DruidAbstractDataSource的testConnectionInternal(DruidConnectionHolder holder, Connection conn)下了断点,发现skip not validate connection,是因为拋出底层异常是socket read time out.