На одной машине работают входящие в состав многокомпонентной системы TCP-сервер и TCP-клиент: сервер слушает, клиент коннектится, сервер принимает соединение и биндит клиента на отдельный сокет на отдельном порту. Сервер выполняет запрос клиента и закрывает соединенение.
Такие запросы происходят несколько раз в секунду, и уже через пару минут с помощью netstat в системе можно обнаружить множество (~20.000) сокетов, которые уже закрыты с обеих сторон, но всё ещё ждут опаздывающие пакеты:
...
tcp 0 0 127.0.0.1:8001 127.0.0.1:46833 TIME_WAIT
tcp 0 0 127.0.0.1:8001 127.0.0.1:46234 TIME_WAIT
tcp 0 0 127.0.0.1:8001 127.0.0.1:46234 TIME_WAIT
...
Можно ли как-то ускорить высвобождение ресурсов в этой ситуации?
Немного ссылок по теме:
- похожее по теме обсуждение: http://www.opennet.ru/base/dev/socket_timeout.txt.html
- здесь я прочёл про TIME_WAIT: http://www.softlab.ntua.gr/facilities/documentation/unix/unix-socket-faq/unix...
- а здесь - про SO_REUSEPORT: http://wiki.treck.com/Socket_Options
- здесь - про ip_ct_tcp_timeout_time_wait http://citforum.ru/operating_systems/linux/ipsysctl/3.shtml