Задать вопрос
darkslesh
@darkslesh

Большое кол-во CLOSE_WAIT в Linux

Собственно говоря ситуация следующая. Есть самописный софт обрабатывающий клиентские запросы. Любое завершение сессии работы с клиентов организовано через:
shutdown(sock, SHUT_RDWR);
close(sock);

И со временем на сервере накапливается огромное кол-во соединений со статусом CLOSE_WAIT (до 90 тысяч штук). В чем может быть проблема? shutdown или в каких-то специфических настройках системы? И есть ли возможно организовать автоматической убийство таких висящих соединений (допустим по таймауту)?
  • Вопрос задан
  • 18965 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 4
rimidal
@rimidal
Таймаут CLOSE_WAIT в линуксе не регулируется.
Состояние сокета CLOSE_WAIT — это когда от удаленной стороны прилетел fin, а локальный сокет еще удерживается программой, и еще не послал свой fin в ответ.
Ищите в своем софте почему сокет не отпускается.
Ответ написан
Комментировать
VBart
@VBart
Значит у вас утечка. И не все завершения сессий обрабатываются корректно. Ищите с дебаггером где утекают сокеты.
Ответ написан
Комментировать
darkslesh
@darkslesh Автор вопроса
Для каждого подключившегося ставлю
Ответ написан
Комментировать
darkslesh
@darkslesh Автор вопроса
SO_KEEPALIVE = 1
TCP_KEEPIDLE = 30
TCP_KEEPINTVL = 30
TCP_KEEPCNT = 2
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы