Невозможно заполнить пул (нет свободного места в буфере)

Я использую Wildfly 8.2 и запускаю ряд запросов БД при открытии определенной веб-страницы. Все запросы вызывают через API-интерфейс JPA, возвращают результаты как ожидалось - и - ни одно из них не выдает предупреждение, ошибку или исключение. Все это работает в Parallel Plesk.

Теперь я заметил, что в течение 2 - 3 дней появляется следующая ошибка, и сайт становится невосприимчивым. Я перезагружаюсь, и я жду около 3 дней, пока это не повторится (в зависимости от количества запросов, которые у меня есть). введите описание изображения здесь

Я проверил tcpsndbuf на моем Linux-сервере, и я заметил, что он постоянно на максимуме. Если я не перезапущу Wildfly. По-видимому, он не может освободить соединения. введите описание изображения здесь

Соединения управляются JPA/Hibernate и контейнером Wildfly. Я не занимаюсь специальной обработкой транзакций, например, открыто закрыто. и т.д. Я оставляю все это в Wildfly.

Используемый мной драйвер MySQL - это 5.1.21 (mysql-connector-java-5.1.21-bin.jar)

В файле standalone.xml я определил следующие значения источника данных datasource (среди прочих):

<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 (или этой ошибки)? Сообщите, если вам требуется больше файлов конфигурации или журнала. Спасибо!


UPDATE Несмотря на следующие дополнительные настройки тайм-аута, он все еще попадает в вешалку. И таким образом, он будет использовать 100% процессорное время, когда достигается максимальный tcpsndbuf. введите описание изображения здесь, введите описание изображения здесь

Ответ 1

Попробуйте добавить это свойство Hibernate:

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

По умолчанию JTA указывает, что соединение должно быть выпущено после каждого утверждения, что нежелательно для большинства случаев использования. В большинстве случаев драйверы не позволяют мультиплексировать соединение по нескольким транзакциям XA.

Ответ 2

Используете ли вы openvz? Я думаю, что этот вопрос следует задать на сервере. Это связано с конфигурацией linux. Вы можете прочитать: tcpsndbuf. Вы должны считать открытые сокеты и проверить условие: Проверка согласованности UBC