gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-28 23:49:37 25 4
gpt4 key购买 nike

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

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

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

连接由 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 时间。 enter image description here , enter image description here

最佳答案

尝试添加这个 Hibernate 属性:

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

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

关于java - 无法填充池(没有可用的缓冲区空间),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31979522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com