关于 hikari,一个迷惑的现象

2019-07-25 10:31:35 +08:00
 hellwys1

properties 进行了以下配置。

spring.datasource.hikari.maximumPoolSize= 12
spring.datasource.hikari.minimumIdle=5

然后我发现 空闲连接数Idle是可以超过maximumPoolSize的。

看了一下HikariDataSource.java 以及HikariConfig.java 发现确实没有 maxIdle 这种选项。

就很神秘,感到很迷惑,这种设计是为什么呢?

解决方法估计有几个,我用的 spring.datasource.tomcat.max-idle=10

那么,各位有遇到这种情况吗?望不吝赐教。

3913 次点击
所在节点    Java
7 条回复
qwerthhusn
2019-07-25 10:46:16 +08:00
具体我也不清楚,,,但是阿里的 druid 连接池提到了 maxIdle。

maxIdle 是 Druid 为了方便 DBCP 用户迁移而增加的,maxIdle 是一个混乱的概念。连接池只应该有 maxPoolSize 和 minPoolSize,druid 只保留了 maxActive 和 minIdle,分别相当于 maxPoolSize 和 minPoolSize。
qwerthhusn
2019-07-25 10:47:07 +08:00
上面是 druid 的 Github Wiki 里面的原话
javlib
2019-07-25 11:34:48 +08:00
idle connection 数量是怎么看的?
我看 HikariPool::logPoolState 可以打印连接状态,如下:
total={}, active={}, idle={}, waiting={}

HourseKeeper 会调用 logPoolState,然后 HouseKeeper 会周期 30s 运行,你把 Hikari 的日志级别设置成 DEBUG 看看呢?
LeeSeoung
2019-07-25 11:52:18 +08:00
= =你用的 hikari 然后配置 tomcatjdbc 的 maxIdle 又有啥用。。你是从哪里推断出 idle 数量大于 maxPoolSize 的,截个图对比放上来看下啊
10Buns
2019-07-25 12:02:26 +08:00
maxIdle 是 DBCP 里面的概念。
当连接数超过 maxIdle 后,刚空闲的连接会立即被销毁, 进而没有缓冲的作用。 如果 maxIdle 与 maxActive 相差较大,系统负载高时会频繁的创建 /销毁连接。所以一般 maxIdle 设置与 maxActive 一致或-1 不限制,让连接数量在 minIdle 与 maxIdle 间波动较小。
hellwys1
2019-07-25 12:57:18 +08:00
@10Buns
谢谢,明白了。
我概念上不清晰。
确实有空闲连接数超过最大连接数的情况,我再查一下。
hellwys1
2019-07-25 13:04:12 +08:00
@LeeSeoung
是的,我太蠢了。😂

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/586026

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX