【摘要】 记录一次未设置数据库连接池超时回收引发的血案
Java渣渣程序员进阶者,大神们多多指教
由于该项目是内网项目,无法远程,运维方是伙伴公司,现场运维截取到如下报错信息 从图片可以看出,请求获取不到数据库连接,系统处于卡死状态。然而系统设定数据库最大连接数为500,最大连接数也就是系统最大并发数,好像一般设定100就够了(好像设置太大了也不好,参考链接:1.你真的知道…
记录一次未设置数据库连接池超时回收引发的血案
Java渣渣程序员进阶者,大神们多多指教
由于该项目是内网项目,无法远程,运维方是伙伴公司,现场运维截取到如下报错信息
从图片可以看出,请求获取不到数据库连接,系统处于卡死状态。然而系统设定数据库最大连接数为500,最大连接数也就是系统最大并发数,好像一般设定100就够了(好像设置太大了也不好,参考链接:1.你真的知道如何设置数据库连接池的大小吗? 2. 数据库连接池到底应该设置多大?),该系统用户数又只有两三千人,应该足够用了(参考:在线用户和并发用户的比例关系)。
继续分析图中报错信息,(runningSqlCount…… )有大量的查询sql占用连接池未释放(不得不说我们公司平台太烂,技术老,写代码都不考虑性能问题。自己又是个菜鸡,工作任务也多,有心无力)。于是在同事提点下,参考:1. Druid配置参数详解 2. Druid参数调优 3. removeAbandonedTimeout配置项疑问 在数据源配置中添加了以下超时回收配置:
**开启自动回收超时连接,设置超时时间为300(即5分钟)。
<!-- 超过时间限制是否回收 -->
<property name="removeAbandoned" value="true" />
<!-- 超时时间;单位为秒。300秒=5分钟 -->
<property name="removeAbandonedTimeout" value="300" />
这里其实我是有疑问的,为什么其他属性的时间单位都是毫秒,这个removeAbandonedTimeout的时间单位是秒呢,于是去查看源码:
默认5分钟
秒转毫秒
工厂类里定义了所有的属性,这块还不太懂啦
不足和错误之处,请多多指教,欢迎评论
码农多年,技术平平,人生有点迷茫,不知前路在何方
文章来源: blog.csdn.net,作者:Mars_xiaotao,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/Mars_xiaotao/article/details/116207637