tcp_tw_reuse vs tcp_tw_recycle: что использовать (или оба)? - PullRequest
47 голосов
/ 21 июня 2011

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

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

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

Ответы [ 2 ]

54 голосов
/ 21 июня 2011

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

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

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

РЕДАКТИРОВАТЬ (добавить несколько предупреждений;)):

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

12 голосов
/ 02 ноября 2017

ПРИМЕЧАНИЕ: net.ipv4.tcp_tw_recycle было удалено из Linux 4.12.

ИСТОЧНИК: https://vincent.bernat.im/en/blog/2014-tcp-time-wait-state-linux

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...