首页 > 数据库 >使用数据库连接池Druid 时 如果未主动关闭连接,会怎样 备忘录

使用数据库连接池Druid 时 如果未主动关闭连接,会怎样 备忘录

时间:2022-11-20 14:57:01浏览次数:39  
标签:获取 activeConnections Druid 开启 activeCount 备忘录 close 连接 连接池

 

开启连接泄露检测:

removeAbandoned=true

一旦开启,CreateConnectionThread 线程就会每隔 timeBetweenEvictionRunsMillis 毫秒轮询一次,

检测是否存在 running=false 且 空闲时间超过 removeAbandonedTimeoutMillis 毫秒  的连接,

如果存在,就close掉,此时 

1. 集合 activeConnections 会移除这个连接。

2. 调用close()关闭连接 , activeCount会减1。

 

特注:

如果开启,在获取连接时,集合 activeConnections 存放该连接。

如果未开启,在获取连接时,集合 activeConnections 不会存放任何连接。

所以,如果项目上线后,未开启泄露检测,一旦存在未关闭的连接,这些连接不会被关闭,activeCount 统计值不会减1,集合 activeConnections 不会保存,

此时,这些连接对象会怎么办?

1. 不会被复用;

2.一段时间后会被JVM垃圾回收;

3.造成 activeCount 统计不准确,从而影响 activeCount 和 maxActive 的比较。

举例:如果 maxActive=10, 有10个连接获取后未被close(),  此时再获取连接,是获取不到的。 这是一个微小的bug, activeCount 统计不准确导致的,留一下就行,一般不会被发现,也很少会遇见这样的情况,  原因是:Spring和Mybatis 每次获取连接后,都会主动调用close()。 

 

标签:获取,activeConnections,Druid,开启,activeCount,备忘录,close,连接,连接池
From: https://www.cnblogs.com/smileblogs/p/16908474.html

相关文章