【问题标题】:Unable to fill pool (no buffer space available)无法填充池(没有可用的缓冲区空间)
【发布时间】:2015-11-05 21:46:10
【问题描述】:

我正在使用 Wildfly 8.2,并在打开某个网页时触发一系列数据库请求。所有查询都通过 JPA Criteria API 调用,按预期返回结果 - 并且 - 它们都没有发出警告、错误或异常。这一切都在 Parallel Plesk 中运行。

现在,我注意到在 2 到 3 天内出现以下错误并且网站变得无响应。我重新启动并等待大约 3 天,直到它再次发生(取决于我的请求数量)。

我检查了我的 linux 服务器上的 tcpsndbuf,我注意到它一直处于最大值。除非我重新启动 Wildfly。显然它无法释放连接。

连接由 JPA/Hibernate 和 Wildfly 容器管理。我不做任何特殊或自定义的事务处理,例如开关。等等。我把这一切都留给了 Wildfly。

我使用的 MySQL 驱动是 5.1.21 (mysql-connector-java-5.1.21-bin.jar)

在standalone.xml 中,我定义了以下数据源数据源值(以及其他):

<transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
<pool>
    <min-pool-size>3</min-pool-size>
    <max-pool-size>10</max-pool-size>
</pool>
<statement>
     <prepared-statement-cache-size>32</prepared-statement-cache-size>
     <shared-prepared-statements>true</shared-prepared-statements>
</statement

有没有人经历过同样的 tcpsndbuf 值上升(或这个错误)?如果您需要更多配置或日志文件,请告诉我。谢谢!


更新 尽管有以下额外的超时设置,它仍然会运行到衣架中。因此,只要达到最大 tcpsndbuf,它将使用 100% 的 CPU 时间。,

【问题讨论】:

    标签: java mysql hibernate transactions wildfly-8


    【解决方案1】:

    尝试添加这个 Hibernate 属性:

    <property name="hibernate.connection.release_mode">after_transaction</property>
    

    默认情况下,JTA mandates that connection should be released after each statement,这对于大多数用例来说是不可取的。无论如何,大多数驱动程序都不允许通过多个 XA 事务多路复用连接。

    【讨论】:

    • 不。它没有帮助。它以同样的方式成长。我还更换了 mysql 驱动程序 - 没有成功。
    【解决方案2】:

    你使用 openvz 吗?我认为这个问题应该在 serverfault 上提出。它与linux配置有关。您可以阅读:tcpsndbuf。您应该计算打开的套接字并检查条件:

    【讨论】:

    • 没有。我使用了平行电源面板。没有任何帮助。 hibernate release_mode 和 mysql 驱动程序更新都不起作用。
    • Parallels Power Panel 是用于管理 openvz 容器的基于 Web 的工具
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    • 2010-11-16
    相关资源
    最近更新 更多