Druid源码阅读10-DruidDataSource中的一些计数器

12 篇文章 2 订阅

在Druid连接池的工作过程中,会用到一些计数器对Druid的情况进行判断。然后根据计数器的数据采取一系列操作,整理如下:

1.统计类的计数器

变量名类型说明
connectCountlonggetConnectionInternal被调用之后就会增加,意味着连接被get的次数。
closeCountlong连接调用recycle中,包括回收、关闭等情况,成功之后会增加,标识连接关闭的次数。
recycleCountlong连接调用recycle成功之后才会增加,不包括在回收过程中关闭的情况。标识连接真正回收的次数。
removeAbandonedCountlong连接调用removeAbandoned成功之后才会增加,标识连接跟踪泄露机制的执行次数。
notEmptyWaitCountlong连接调用pollLast或者tackLast之后就会增加,实际上是触发notEmpty.await的的次数.
notEmptySignalCountlong连接触发notEmpty的signal的次数。
discardCountvolatile long调用discard成功之后的次数。

上述long类型的计数器,全部只会增加,不会减少,在Druid工作的过程中进行统计和监控作用。

2.状态相关的计数器

变量名类型说明
poolingCountintDruidConnectionHolder[] connections数组中连接的数量。
activeCountintMap<DruidPooledConnection, Object> activeConnections 中的连接数量。
notEmptyWaitThreadCountint连接被取出之后,触发notEmpty进行wait线程的数量。
activePeakintactiveCount出现的峰值。
poolingPeakintpoolingCount出现的峰值。
createTaskCountint创建连接线程数的计数器。

3.相关的判断逻辑:

poolingCount < initialSize 时,创建连接以达到初始化连接数。
poolingCount >= maxActive 时,回收的连接会被拒绝放入connections中。

activeCount + poolingCount >= maxActive时, empty.await(),创建连接的线程会被取消。
activeCount + poolingCount <= minIdle 时,通知emptySignal(),通知继续创建连接。
keepAlive && poolingCount + activeCount < minIdle 时,再shrink方法中needFill为true,会触发通知emptySignal(),继续创建连接。
activeCount + poolingCount + createTaskCount >= maxActive 时,开启了createScheduler,则会取消createScheduler的创建任务。
activeCount <= minIdle 时,触发emptySignal(),创建连接。

4.存储Connection的容器

变量名类型说明
connectionsDruidConnectionHolder[]连接存放的数组。
keepAliveConnectionsDruidConnectionHolder[]keepAlive连接存放的数组。只会在shrink中开启了keepalive才会使用。
evictConnectionsDruidConnectionHolder[]需要关闭的连接存放的数组。shrink中该数组中的连接都会被关闭掉。
activeConnectionsMap<DruidPooledConnection, Object>getConnection之后,存放的容器。

Druid各连接存储容器转换关系

5.思考的问题

问题:既然poolingCount,和activeCount都与其容器的数量一致,为什么不直接使用数组的length或者map的size.
另外一个问题,为什么不使用类似于线程持的状态机。状态定义得比较混乱。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值