开启连接泄露检测:
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