alibaba / druid

阿里云计算平台DataWorks(https://help.aliyun.com/document_detail/137663.html) 团队出品,为监控而生的数据库连接池
https://github.com/alibaba/druid/wiki
Apache License 2.0
27.97k stars 8.58k forks source link

ActiveCount数据错误,连接泄漏问题(GetConnectionTimeoutException) #5357

Closed Curtaingit closed 1 year ago

Curtaingit commented 1 year ago

版本:1.2.4 异常信息:ERROR c.s.f.w.e.GlobalExceptionHandler - Could not open JDBC Connection for transaction; nested exception is com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 60000, active 200, maxActive 200, creating 0 org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction;

监控页面信息: 82ee99601a6fc16de2d47aa22a86101

现象描述:服务器运行一段时间后,实际与数据连接信息为0 通过sql show processlist查询得知, activeCout=200 配置的maxActive=200,导致无法获取数据库连接进行sql操作。

druid配置信息:

初始连接数

  initialSize: 10
  # 最小连接池数量
  minIdle: 10
  # 最大连接池数量
  maxActive: 100
  # 配置获取连接等待超时的时间
  maxWait: 60000
  # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
  timeBetweenEvictionRunsMillis: 60000
  # 配置一个连接在池中最小生存的时间,单位是毫秒
  minEvictableIdleTimeMillis: 300000
  # 配置一个连接在池中最大生存的时间,单位是毫秒
  maxEvictableIdleTimeMillis: 900000
  # 配置检测连接是否有效
  validationQuery: SELECT 1 FROM DUAL
  removeAbandoned: true
  removeAbandonedTimeout: 300
  logAbandoned: true
  testWhileIdle: true
  testOnBorrow: false
  testOnReturn: false

疑问:什么情况下会导致连接已经释放, activeCount数量没有变化, 监测页面都可以显示池中连接为0,是否可以有机制去同步处理更新activeCount。 同时日志中没有abandon记录信息。

Curtaingit commented 1 year ago

调试后已解决,问题为加锁未释放导致 连接池中连接释放后,但是active连接数未变更。 removeAbandoned因为配置原因未生效导致 不会自动对废弃连接处理