当前位置:网站首页 > 数据科学与大数据 > 正文

druid数据库连接池阻塞(druid连接池github)



某天晚上,突然收到运维同事反馈说系统告警,A系统调用B系统出现大量超时,通过日志分析,B系统中出现了大量的mysql连接报错信息,但是却没有收到任何http请求,怀疑是线程阻塞,运维人员进行了线上的重启操作,系统恢复,开始了问题的追溯。

查看日志中的数据库报错,首先确定问题的源头是出在数据库上面,相关报错日志如下(已屏蔽敏感信息):

 
  
 
  

到此时,已经基本确定问题就出在服务端系统,也就是B系统,虽然从日志和热力图的现象都表明B系统没有收到任何请求,但是从线程池的表现来看,这是进入了排队等待的状态,当活跃线程数量达到上限时,系统就停止响应了。

 
  
 
  
 
  

进一步分析代码,发现当maxWait为初始值是会执行takeLast方法,该方法会调用线程的await方法获取可用连接,而数据库可用连接为0则会导致该操作一直lock住,从而使得线程挂起。

 
  
 
  

看到此处,是不是已经豁然开朗,那么我们解决问题的思路也就有了。

只要问题分析清楚了,解决问题有时候其实是一件很容易的事情,通过上面的分析我们得知,druid在获取不到可用连接时,会有一个超时时间,这个超时时间就是maxWait,也就是说,只需要将maxWait设置为一个值,那么我们就可以在数据库出现故障时,快速的失败返回,由于使用的springboot的starter方式引入,我们可以直接在springboot的yml配置(笔者所在公司使用的携程apollo配置中心,且统一框架内嵌druid默认配置)中添加如下参数即可:

 
  
到此这篇druid数据库连接池阻塞(druid连接池github)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • orical数据库安装(oracle数据库安装视频教程)2026-04-10 17:36:17
  • 数据库入门视频教程(数据库零基础入门教学)2026-04-10 17:36:17
  • pymysql连接mysql数据库(mysql连接pycharm)2026-04-10 17:36:17
  • faiss数据库官网(fabric 数据库)2026-04-10 17:36:17
  • sql文件是什么格式(sql的数据文件是什么)2026-04-10 17:36:17
  • druid数据库连接池配置详解(druid连接池配置文件)2026-04-10 17:36:17
  • 自动驾驶数据集的研究方向(自动驾驶数据集的研究方向有哪些)2026-04-10 17:36:17
  • 数据库管理员培训机构(数据库管理员考试报名)2026-04-10 17:36:17
  • cmip6模式下载(cmip6数据介绍)2026-04-10 17:36:17
  • 进程控制块是进程存在的唯一标志吗(进程控制块是专为用户进程设置的私有数据结构)2026-04-10 17:36:17
  • 全屏图片