Подтвердить что ты не робот

Tcp_tw_reuse vs tcp_tw_recycle: что использовать (или оба)?

У меня есть веб-сайт и приложение, которые используют значительное количество подключений. Обычно он имеет около 3000 соединений, статически открытых и может получать от 5000 до 50000 попыток подключения в течение нескольких секунд.

У меня возникла проблема с запуском локальных портов для открытия новых подключений из-за сокетов статуса TIME_WAIT. Даже с tcp_fin_timeout, установленным на низкое значение (1-5), это, по-видимому, вызывало слишком много накладных расходов/замедлений, и это все равно иногда не могло бы открыть новый сокет.

Я просмотрел tcp_tw_reuse и tcp_tw_recycle, но я не уверен, какой из них был бы предпочтительным выбором, или если использовать оба из них - это вариант.

4b9b3361

Ответ 1

Согласно документации Linux, вы должны использовать флаг TCP_TW_REUSE, чтобы разрешить повторное использование сокетов в состоянии TIME_WAIT для новых подключений.

Кажется, это хороший вариант при работе с веб-сервером, которому приходится обрабатывать множество коротких TCP-соединений, оставшихся в состоянии TIME_WAIT.

Как описано здесь, TCP_TW_RECYCLE может вызвать некоторые проблемы при использовании балансировщика нагрузки...

EDIT (добавить некоторые предупреждения;)):

как указано в комментарии от @raittes, "проблемы при использовании балансировщика нагрузки" относятся к публичным серверам. Когда включен режим рециркуляции, сервер не может отличать новые входящие соединения от разных клиентов за одним и тем же устройством NAT.