Исключение Broken Pipe в приложении Dropwizard

Я получаю исключение «сломанной трубы», когда сервер долгое время работает без каких-либо HTTP-запросов. После некоторого расследования я обнаружил, что это исключение возникает из-за того, что сервер закрывает соединение с базой данных и возникает, когда клиент запрашивает ресурсы, когда соединение закрыто. Чтобы исправить это, я добавил следующее в URL-адрес соединения jdbc.

?autoReconnect=true

Я также увеличил динамическую память на машине на всякий случай. Также не так много http-клиентов, запрашивающих ресурсы с этого сервера dropwizard. Есть ли что-то еще, что может происходить?

Сообщение об ошибке для справки

You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.

Есть ли способ настроить пул соединений в приложении dropwizard? Или рекомендуется изменить свойства «интерактивный тайм-аут» и «ожидание_таймаута» mysqld на более чем 8 часов?


person user_mda    schedule 06.04.2015    source источник


Ответы (2)


Спасибо за помощь, я исправил эту проблему, добавив следующее в файл yaml

  1. checkConnectionWhileIdle: true
  2. checkConnectionOnReturn: true
  3. checkConnectionOnBorrow: true

И убедитесь, что все транзакции зафиксированы, отменены в случае исключений и закрытых сессий после использования.

person user_mda    schedule 14.04.2015

В зависимости от того, используете ли вы JDBi, Hibernate или что-то еще, я рекомендую использовать предоставленные пакеты для настройки подключения. Эти пакеты поставляются со встроенным пулом, который легко настраивается, как показано в примерах по ссылкам.

Если вы используете простой JDBC или другой преобразователь ИЛИ, вы всегда можете написать управляемый объект или подходящий пакет самостоятельно, или попробуйте использовать ManagedPooledDataSource непосредственно во время запуска.

person Ralf    schedule 14.04.2015