当前位置: 首页 > news >正文

druid keepAlive 导致数据库连接数飙升

一.背景

应用在执行完某个复杂业务,主要包含20几个查询SQL的操作后,会导致数据库连接池一直升高

druid版本:1.2.11
druid配置文件:

spring.datasource.druid.maxActive=100
spring.datasource.druid.initialSize=20
spring.datasource.druid.maxWait=6000
spring.datasource.druid.minIdle=20
spring.datasource.druid.timeBetweenEvictionRunsMillis=6000
spring.datasource.druid.keepAlive=true
spring.datasource.druid.minEvictableIdleTimeMillis=30000
spring.datasource.druid.validationQuery=select 1 from dual
spring.datasource.druid.testWhileIdle=true
spring.datasource.druid.testOnBorrow=false
spring.datasource.druid.testOnReturn=false
spring.datasource.druid.poolPreparedStatements=true
spring.datasource.druid.maxOpenPreparedStatements=20

二.排查过程

logging.level.com.alibaba.druid=debug

打开druid debug日志,发现如下报错

3.进行本地调试跟踪发现druid 的shrink 方法在保活处理时存在问题。

System.arraycopy(connections, removeCount, connections, 0, poolingCount - removeCount);
Arrays.fill(connections, poolingCount - removeCount, poolingCount, null);

shrink方法中这两行代码从connections[]数组移除的数据库连接,和shrink方法中这两行代码上面的添加到keepAliveConnections[]数组中的连接不一致

异常结果:

  1. 正常的连接引用直接丢失,也就是既不在connections[]数组,也不在keepAliveConnections[]数组
  2. 会不断触发新建数据库连接,导致泄露

三.解决方案

1.关闭keepAlive

2.升级Druid版本到1.2.20

http://www.lryc.cn/news/246583.html

相关文章:

  • 四川竹哲电子商务有限公司深耕抖音电商服务领域
  • 爬虫中XPath语法四个重要概念及示例
  • MySQL-03-索引
  • CSS-长度单位篇
  • 自己动手实现一个深度学习算法——七、卷积神经网络
  • office word 使用笔记
  • vue中下载文件后无法打开的坑
  • 【追求卓越04】数据结构--栈与队列
  • 基于SpringBoot的超市信息管理系
  • 【计算机组成原理】存储系统
  • 基于SSM的旅游管理系统设计与实现
  • JeecgBoot3.0 漏洞升级 — 快速文档
  • 6.一维数组——用冒泡法,选择法将5个整数由大到小排序
  • YOLOv8 onnx 文件推理多线程加速视频流
  • CVE-2017-12615 文件上传
  • c++没有返回值的返回值
  • 全网最全卡方检验汇总
  • Java基础-中级-高级面试题汇(一)
  • 数据结构 / day04 作业
  • Java核心知识点整理大全20-笔记
  • Spark---转换算子、行动算子、持久化算子
  • 什么是关系型数据库?
  • 【LeetCode】挑战100天 Day12(热题+面试经典150题)
  • ArcGIS10.x系列 Python工具箱教程
  • 【蓝桥杯】刷题
  • 软件产品登记的材料条件
  • 春节后跟进客户开发信模板?外贸邮件模板?
  • 个人财务管理软件CheckBook Pro mac中文版特点介绍
  • rfc4301- IP 安全架构
  • 【数据结构/C++】线性表_双链表基本操作