无法填充池(没有可用的缓冲区空间)

Posted

技术标签:

【中文标题】无法填充池(没有可用的缓冲区空间)【英文标题】: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 时间。,

【问题讨论】:

【参考方案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 的工具

以上是关于无法填充池(没有可用的缓冲区空间)的主要内容,如果未能解决你的问题,请参考以下文章

没有可用的缓冲空间

sendmmsg() return -1,没有可用的缓冲区空间,为啥 memset 解决了这个问题?

db2缓冲池调优

DB2:在缓冲池 "1" 中当前没有任何页面可用。. SQLCODE=-1218, SQLSTATE=57011, DRIVER=3.61.75

c++缓冲池循环队列实现

表空间缓冲池