2015-09-09 9 views
2

Я использую Spring Boot (1.3.O.M5) с Undertow. В последнее время я обнаружил, что, когда я использую командуUndertow на соединениях с пружинными соединениями

lsof -p $(pidof java) 

через несколько часов, он представляет меня около 700 линий, большинство из которых установлены TCP соединений с клиентами, несмотря на то, почти никто не вошел в страницу в последний час (и когда я подключаюсь к сайту, моя связь пропадает примерно через 5 минут).

Скорее всего, это источник моего java.net.SocketException: Слишком много открытых файлов, которые я получал каждые пару дней (требуя перезагрузки приложения), прежде чем я заметил устаревшие соединения. Я увеличил максимальный предел открытых файлов в системе, но, похоже, это краткосрочное решение.

Буду признателен за помощь в решении проблемы. Благодаря!

+0

Кроме того, компонент UndertowEmbeddedServletContainerFactory с помощью setSessionTimeout (3) не сокращал тайм-аут сеанса до 3 секунд. Также server.session.timeout = 3 :( –

+0

Какие внешние подключения? Внутренние системы? Объясните соединения, чтобы понять, в какой части приложения это происходит. Также таймаут сеанса для сеансов HTTP и ничего не делает для соединений. –

+0

Это то, что я думал с тех пор, как увидел свойство. Однако никогда не мешает попробовать. Соединения - это только TCP-соединения с устройствами, посещающими веб-сайт. –

ответ

0

Попробуйте установить httpServerExchange.setPersistent(false);, это помогает мне, когда у меня возникают такие же проблемы. И да - это вызывает слишком много открытых файлов ошибку, потому что превышает предел с файловыми дескрипторами

1

Undertow не таймаут соединения по умолчанию, вам необходимо установить его с помощью что-то вроде:

Undertow.builder().setServerOption(UndertowOptions.NO_REQUEST_TIMEOUT, 60000) 

Это покажет Undertow закрыть соединение после 60 секунд без запросов от клиента.

+0

Я просто изменил это в восходящем направлении Und ertow по умолчанию до 10 минут, см. https://issues.jboss.org/browse/UNDERTOW-630 –

+0

Я установил его в Application.main, сразу после запуска SpringApplication ... и написав это, я понимаю, что, вероятно, должен Это было сделано до запуска приложения, но он не работает с банкоматом. У меня было 200 открытых файлов при запуске приложения в prod и теперь у вас есть около 600 устройств с доступом к веб-сайту. –