国外网站 图片,北京招聘网站排行,注册域名多长时间,做网站什么东西需要费用一.背景
应用在执行完某个复杂业务#xff0c;主要包含20几个查询SQL的操作后#xff0c;会导致数据库连接池一直升高
druid版本#xff1a;1.2.11 druid配置文件#xff1a;
spring.datasource.druid.maxActive100
spring.datasource.druid.initialSize20
spring.datas…一.背景
应用在执行完某个复杂业务主要包含20几个查询SQL的操作后会导致数据库连接池一直升高
druid版本1.2.11 druid配置文件
spring.datasource.druid.maxActive100
spring.datasource.druid.initialSize20
spring.datasource.druid.maxWait6000
spring.datasource.druid.minIdle20
spring.datasource.druid.timeBetweenEvictionRunsMillis6000
spring.datasource.druid.keepAlivetrue
spring.datasource.druid.minEvictableIdleTimeMillis30000
spring.datasource.druid.validationQueryselect 1 from dual
spring.datasource.druid.testWhileIdletrue
spring.datasource.druid.testOnBorrowfalse
spring.datasource.druid.testOnReturnfalse
spring.datasource.druid.poolPreparedStatementstrue
spring.datasource.druid.maxOpenPreparedStatements20
二.排查过程
logging.level.com.alibaba.druiddebug
打开druid debug日志,发现如下报错 3.进行本地调试跟踪发现druid 的shrink 方法在保活处理时存在问题。
System.arraycopy(connections, removeCount, connections, 0, poolingCount - removeCount); Arrays.fill(connections, poolingCount - removeCount, poolingCount, null);
shrink方法中这两行代码从connections[]数组移除的数据库连接和shrink方法中这两行代码上面的添加到keepAliveConnections[]数组中的连接不一致
异常结果
正常的连接引用直接丢失也就是既不在connections[]数组也不在keepAliveConnections[]数组会不断触发新建数据库连接导致泄露
三.解决方案
1.关闭keepAlive
2.升级Druid版本到1.2.20