java - mybatis POOLED 数据源

标签 java connection-pooling mybatis

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

poolMaximumIdleConnections: 5
poolMaximumActiveConnections: 20

我用 102、742 请求(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 个连接仍处于打开状态 - 连接泄漏?

最佳答案

如您在源代码中所见,“ checkout ”连接意味着如果有空闲池可用则从空闲池中取出它,请参见第 375 行。

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

所以, checkout 意味着“重复使用”,这就解释了“ checkout ”数。

当然,没有人会永远活着——即使是旧的联系也不会。因此,较旧的连接通常会在闲置一段时间后被终止,这意味着闲置池会缩小,如果需要,则需要新的连接。这会导致“已创建”连接的数量。

不,如果最后有 10 个人还活着,那就完全正常了。如您所见,有 10 个连接甚至还没有关闭,这通常意味着某些东西仍在使用它们。或者它可能是你这边的一个错误,很难说。

关于java - mybatis POOLED 数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33088170/

相关文章:

java - 将 sqlMapConfig 保留在 jar/classpath 之外

java - React Native ReactContext 生命周期停留在 BEFORE_CREATE

java - 无法获取 JdbcConnectionException : The BUFFERDIR connection property is invalid

java - 使用 Stream java 8 将 String 转换为 set<Character>

tomcat - tomcat 线程 "PoolCleaner[{a number}]"异常

java - C3PO 连接池 - 连接未释放

grails - 如何修复Grails中的连接池泄漏?

java - 更改Gradle Project的文件夹结构时,线程 “main” java.lang.ExceptionInInitializerError中的异常

java - 如何从 Android 中的普通 java 类调用 Activity 类

java - GCMIntentService onRegistered 方法除了 regId 之外还需要发送附加信息到我的服务器