Сведения о вопросе

Life

17:44, 2nd October, 2020

Теги

Linux    

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

Просмотров: 312   Ответов: 5

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

И со временем на сервере накапливается огромное кол-во соединений со статусом CLOSE_WAIT (до 90 тысяч штук). В чем может быть проблема? shutdown или в каких-то специфических настройках системы? И есть ли возможно организовать автоматической убийство таких висящих соединений (допустим по таймауту)?



  Сведения об ответе

прога

22:06, 28th September, 2020

По идее троица sysctl-параметров:
net.ipv4.tcp_keepalive_time
net.ipv4.tcp_keepalive_probes
net.ipv4.tcp_keepalive_intvl
должна выставить адекватный таймаут, потому что по умолчанию 2 часа ожидания и 9 попыток по 75 сек на возрождение соединения.
Вот когда-то писал на эту тему.


  Сведения об ответе

PHPH

13:57, 25th September, 2020

Таймаут CLOSE_WAIT в линуксе не регулируется.
Состояние сокета CLOSE_WAIT — это когда от удаленной стороны прилетел fin, а локальный сокет еще удерживается программой, и еще не послал свой fin в ответ.
Ищите в своем софте почему сокет не отпускается.


  Сведения об ответе

9090

08:17, 28th September, 2020

Значит у вас утечка. И не все завершения сессий обрабатываются корректно. Ищите с дебаггером где утекают сокеты.


  Сведения об ответе

PHPH

17:59, 29th September, 2020

Для каждого подключившегося ставлю


  Сведения об ответе

piter

17:16, 29th September, 2020

SO_KEEPALIVE = 1
TCP_KEEPIDLE = 30
TCP_KEEPINTVL = 30
TCP_KEEPCNT = 2


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться