首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Java

关于 hikari,一个迷惑的现象

  •  
  •   hellwys1 · 57 天前 · 1227 次点击
    这是一个创建于 57 天前的主题,其中的信息可能已经有所发展或是发生改变。

    properties 进行了以下配置。

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

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

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

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

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

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

    7 回复  |  直到 2019-07-25 13:04:12 +08:00
        1
    qwerthhusn   57 天前   ♥ 1
    具体我也不清楚,,,但是阿里的 druid 连接池提到了 maxIdle。

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

    HourseKeeper 会调用 logPoolState,然后 HouseKeeper 会周期 30s 运行,你把 Hikari 的日志级别设置成 DEBUG 看看呢?
        4
    LeeSeoung   57 天前   ♥ 1
    = =你用的 hikari 然后配置 tomcatjdbc 的 maxIdle 又有啥用。。你是从哪里推断出 idle 数量大于 maxPoolSize 的,截个图对比放上来看下啊
        5
    10Buns   57 天前   ♥ 1
    maxIdle 是 DBCP 里面的概念。
    当连接数超过 maxIdle 后,刚空闲的连接会立即被销毁, 进而没有缓冲的作用。 如果 maxIdle 与 maxActive 相差较大,系统负载高时会频繁的创建 /销毁连接。所以一般 maxIdle 设置与 maxActive 一致或-1 不限制,让连接数量在 minIdle 与 maxIdle 间波动较小。
        6
    hellwys1   57 天前
    @10Buns
    谢谢,明白了。
    我概念上不清晰。
    确实有空闲连接数超过最大连接数的情况,我再查一下。
        7
    hellwys1   57 天前
    @LeeSeoung
    是的,我太蠢了。😂
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   960 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 22ms · UTC 22:49 · PVG 06:49 · LAX 15:49 · JFK 18:49
    ♥ Do have faith in what you're doing.