无法填充池(没有可用的缓冲区)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法填充池(没有可用的缓冲区)相关的知识,希望对你有一定的参考价值。
我正在使用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时间.,
尝试添加此Hibernate属性:
<property name="hibernate.connection.release_mode">after_transaction</property>
默认情况下,JTA mandates that connection should be released after each statement,这对大多数用例来说是不受欢迎的。大多数驱动程序不允许在多个XA事务上多路复用连接。
你用openvz吗?我认为应该在serverfault上询问这个问题。它与linux配置有关。你可以阅读:tcpsndbuf。您应该计算打开的套接字并检查条件:
以上是关于无法填充池(没有可用的缓冲区)的主要内容,如果未能解决你的问题,请参考以下文章
DB2:在缓冲池 "1" 中当前没有任何页面可用。. SQLCODE=-1218, SQLSTATE=57011, DRIVER=3.61.75