druid 踩坑


问题描述

系统某个时间段有大量数据库操作,此时页面偶尔就要出现卡死现状


原因分析:

  1. 毫无疑问,这是由于数据库连接不够用,正常来讲加连接就行
  2. 但是由于也就只有这个时间段需要用到很多连接,平时更多都是10几个连接够用,加连接感觉太浪费
  3. 页面卡死可能是获取不到连接,于是加了 max-wait 配置,获取链接的超时时间
  4. 设置了后发现问题依旧没有解决,本地实验了后发现 max-wait 确实不生效

解决方案:

1. 查看 max-wait 使用的代码

在这里插入图片描述
在这里插入图片描述

这个方法作用是从池子中获取最后一个链接,当池子中没有链接的时候,阻塞该线程,当创建新连接或者归还连接时通知阻塞线程,所以单纯看这段代码逻辑 max-wait 的实现是没有问题的

2. 查看 max-wait 前置代码

实际调试后发现当链接满时,继续执行数据库操作不会跳到获取链接的方法中来
在这里插入图片描述

在这里插入图片描述
这里的这段代码就是说如果链接已满,就会无限循环,所以根本就不会去获取链接了,因此导致了死循环

3. 查询资料解决

最终在官方中找到了该问题,去年12月时更新导致的,还是比较坑的

https://github.com/alibaba/druid/issues/5495

4. 经验教训

任何配置都应该实验一遍出效果再用,如果有时间就得看下该配置在源码中是如何使用的,一般都不会太复杂,也不是很费时间。同时也要注意有时你通过配置解决了一个问题,有可能是个偶然,实际能不能解决应该去研究代码逻辑在该配置下是否能按照需要的执行

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值