mybatis POOLED数据源

时间:2015-10-12 18:48:32

标签: java connection-pooling mybatis

我正在使用myBatis POOLED datasource。以下是连接池配置 -

poolMaximumIdleConnections: 5
poolMaximumActiveConnections: 20

我使用102, 742 request (160 TPS)点击了该服务,并通过启用mybatis日志获得了以下指标 -

No of Request: 102,742

No of Created connection: 8,841
No of Checked out connection: 93,901

No of Returned connection: 93,911
No of Closed connection: 8,831

No of Claimed overdue connection: 0
No of bad connection: 0
  1. 如果池大小为20,为什么会创建8,841个连接。难道它不会创建20个连接并从池中重用吗?
  2. 创建了8,841个连接,但只有8,831个关闭。这是否意味着10个连接仍在那里打开 - 连接泄漏?

1 个答案:

答案 0 :(得分:1)

正如您在源代码中看到的那样,"签出"连接意味着从空闲池中获取它,如果有空,请参见第375行。

如果没有可用的,代码会尝试"创建"一个(见第381行)

因此,签出意味着"重用",这解释了"签出"号。

当然,没有人永远活着 - 即使是旧的联系也不会。因此,较旧的连接通常在空闲一段时间后被杀死,这意味着空闲池会缩小,如果需要,则需要新的连接。这导致"创建"连接。

不,如果最终,10人还活着,这可能是完全正常的。正如您所看到的,10个连接甚至尚未关闭,这通常意味着仍然使用它们。或者它可能是你的最终错误,很难说。