properties 进行了以下配置。
spring.datasource.hikari.maximumPoolSize= 12
spring.datasource.hikari.minimumIdle=5
然后我发现 空闲连接数Idle
是可以超过maximumPoolSize
的。
看了一下HikariDataSource.java
以及HikariConfig.java
发现确实没有 maxIdle 这种选项。
就很神秘,感到很迷惑,这种设计是为什么呢?
解决方法估计有几个,我用的
spring.datasource.tomcat.max-idle=10
那么,各位有遇到这种情况吗?望不吝赐教。
1
qwerthhusn 2019-07-25 10:46:16 +08:00 1
具体我也不清楚,,,但是阿里的 druid 连接池提到了 maxIdle。
maxIdle 是 Druid 为了方便 DBCP 用户迁移而增加的,maxIdle 是一个混乱的概念。连接池只应该有 maxPoolSize 和 minPoolSize,druid 只保留了 maxActive 和 minIdle,分别相当于 maxPoolSize 和 minPoolSize。 |
2
qwerthhusn 2019-07-25 10:47:07 +08:00
上面是 druid 的 Github Wiki 里面的原话
|
3
javlib 2019-07-25 11:34:48 +08:00 1
idle connection 数量是怎么看的?
我看 HikariPool::logPoolState 可以打印连接状态,如下: total={}, active={}, idle={}, waiting={} HourseKeeper 会调用 logPoolState,然后 HouseKeeper 会周期 30s 运行,你把 Hikari 的日志级别设置成 DEBUG 看看呢? |
4
LeeSeoung 2019-07-25 11:52:18 +08:00 1
= =你用的 hikari 然后配置 tomcatjdbc 的 maxIdle 又有啥用。。你是从哪里推断出 idle 数量大于 maxPoolSize 的,截个图对比放上来看下啊
|
5
10Buns 2019-07-25 12:02:26 +08:00 1
maxIdle 是 DBCP 里面的概念。
当连接数超过 maxIdle 后,刚空闲的连接会立即被销毁, 进而没有缓冲的作用。 如果 maxIdle 与 maxActive 相差较大,系统负载高时会频繁的创建 /销毁连接。所以一般 maxIdle 设置与 maxActive 一致或-1 不限制,让连接数量在 minIdle 与 maxIdle 间波动较小。 |