HikariCP连接在10次点击后超时

时间:2018-05-22 12:22:23

标签: spring

我最近升级到SpringBoot 2.0.2.RELEASE。默认连接池已从Tomcat移至HikariCP。我已经更改了我的application.properties,如下所示

$.each(json, function(i, item) {
    let myLatlng = new mapboxgl.LngLat(json[i].lng, json[i].lat);
    let marker = new mapboxgl.Marker()
    .setLngLat(myLatlng)
    .setPopup(new mapboxgl.Popup({ offset: 25 })
    .setHTML('<h3>' + json[i].name + '</h3><p>' + json[i].address1 + '</p>'))
    .addTo(map);
  });

我使用标准的CrudRepository来操作Oracle DB。我已经构建了一个样本控制器来从DB中获取数据。在10次点击之后,报告以下错误并且在之后没有执行查询。如果我在设置中遗漏任何内容,请告诉我。一切都运行良好1.5.10。

spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.minimumIdle=5
spring.datasource.hikari.maximumPoolSize=10
spring.datasource.hikari.idleTimeout=20000
spring.datasource.hikari.poolName=CoffeeHikariCP
spring.datasource.hikari.maxLifetime=1800000
spring.datasource.hikari.connectionTimeout=30000
spring.jpa.open-in-view=false

先谢谢

2 个答案:

答案 0 :(得分:0)

我有同样的问题。

正如@brettw所说,您可以启用Hikari的LeakDetectionThreshold。

在Spring-boot中,您可以在application.properties中添加以下属性:

spring.datasource.hikari.leakDetectionThreshold=2000

Hikari抛出了这个有用的堆栈跟踪:

23:59:06.887 [HikariPool-1 housekeeper] WARN  com.zaxxer.hikari.pool.ProxyLeakTask - Connection leak detection triggered for conn9: url=jdbc:h2:file:./src/main/resources/h2/schema-test.mv.db user=SA on thread main, stack trace follows
java.lang.Exception: Apparent connection leak detected
    at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:128)
    at xyz.testutils.DbUnitUtils.assertDatabaseEquals(DbUnitUtils.java:43)
    at xyz.controller.MyIntegrationTest.test(MyIntegrationTest.java:117)

就我而言,我正在使用DbUnit,并且正在打开Connection(以检索数据库的内容),但是没有关闭它。关闭连接(.close()后,它已固定。

答案 1 :(得分:0)

您需要结帐几件事:

  1. 您每秒发送多少个请求,每秒发送10个请求吗?
  2. 处理请求需要多长时间,响应时间呢?
  3. 如果您每秒发送10个请求,并且请求处理所花费的时间超过了所有连接在处理请求中所占用的时间,那么这里是10。

如果在每次请求处理后关闭连接或检查是否有泄漏,请增加连接池的大小。

启用leakDetectionThreshold ... hikari.setLeakDetectionThreshold(60 * 1000)并查看日志中是否有泄漏消息。记录的stacktrace应该会将您引到代码中借用但未返回连接的位置。

在日志记录框架中为软件包DEBUG level logging启用com.zaxxer.hikari,并观察每30秒记录的池统计信息:

DEBUG 2018-03-14 07:06:46 com.zaxxer.hikari.pool.HikariPool - Pool-0 - Before cleanup stats (total=5, active=0, idle=5, waiting=0)
DEBUG 2018-03-14 07:06:46 com.zaxxer.hikari.pool.HikariPool - Pool-0 - After cleanup  stats (total=5, active=0, idle=5, waiting=0)

如果它继续增加,请确保使用后关闭连接。