Откат на пружине утечки соединения
Я использую Spring Boot (1.3.O.M5) с Undertow. Недавно я обнаружил, что когда я использую
lsof -p $(pidof java)
Через несколько часов команда выдаст мне около 700 строк, большинство из которых установлены TCP-соединениями с клиентами, хотя за последний час почти никто не зашел на страницу (а когда я подключаюсь к сайту, мое соединение исчезает примерно после 5 минут).
Скорее всего, это источник моего java.net.SocketException: слишком много открытых файлов - которые я получал каждые пару дней (требуя перезапуска приложения), прежде чем заметил устаревшие соединения. Я увеличил максимальный лимит открытых файлов в системе, но это, очевидно, кажется краткосрочным решением.
Буду признателен за помощь в решении этой проблемы. Спасибо!
2 ответа
Undertow не имеет тайм-аута соединения по умолчанию, вам нужно установить его, используя что-то вроде:
Undertow.builder().setServerOption(UndertowOptions.NO_REQUEST_TIMEOUT, 60000)
Это скажет Undertow, чтобы закрыть соединение через 60 с без запросов от клиента.
Попробуйте установить httpServerExchange.setPersistent(false);
, это помогает мне, когда у меня были такие же проблемы. И да - это приводит к слишком большому количеству ошибок при открытии файлов, так как превышает лимит файловых дескрипторов