无法获取 JDBC 连接,但仅使用了 10% 的可用连接

问题描述 投票:0回答:1

这是我遇到的异常

这是我在 c3p0 中使用的配置

<property name="acquireIncrement">5</property>
        <property name="preferredTestQuery">SELECT 1</property>
        <property name="checkoutTimeout">2000</property>
        <property name="idleConnectionTestPeriod">30</property>
        <property name="initialPoolSize">5</property>
        <property name="maxIdleTime">18000</property>
        <property name="maxPoolSize">500</property>
        <property name="minPoolSize">5</property>
        <property name="maxStatements">20</property>
        <property name="testConnectionOnCheckin">true</property>
        <property name="unreturnedConnectionTimeout">60</property>
        <property name="debugUnreturnedConnectionStackTraces">true</property>

我当前的连接池情况截图如下:

您可以在图片中看到连接池中当前仅存在 27 个连接,而我的 maxPoolSize 为 500,但我仍然无法建立更多连接。

当我遇到此异常时,有人能弄清楚吗?

hibernate playframework database-connection connection-pooling c3p0
1个回答
0
投票

将 checkoutTimeout 值增加到更高的值,例如 10000(10 秒)或 30000(30 秒)。根据设计,c3p0 池管理器将尝试首先建立与数据库的连接,然后将这些连接对象添加到池中,直到达到更高的值(例如 - 30 到 200),只有在此之后才会将数据库连接提供给正在等待的 http 线程。应用。同时,如果 http 线程获取连接对象的时间超过 2 秒,则会抛出超时错误 - “客户端尝试签出连接已超时”并返回。

© www.soinside.com 2019 - 2024. All rights reserved.