Инцидент начался с резкого падения RPS на Traefik-ноде. Мониторинг показывал «connection refused», но netstat -s не выявлял переполнения listen backlog. Заглянули глубже: ss -s показал 180K соединений в TIME_WAIT. sysctl net.ipv4.ip_local_port_range был стандартным (32768–60999) — всего ~28K портов. При 5K RPS и коротких сессиях порты заканчивались за секунды. tcp_tw_reuse включён? Да. Но он работает ТОЛЬКО для OUTBOUND соединений с monotonically increasing timestamps — и НЕ помогает, если клиент (в нашем случае — бэкенд) не поддерживает PAWS. А большинство Go-сервисов — нет. Решение: принудительный keepalive на уровне прокси + увеличение ip_local_port_range до 1024–65535 + снижение tcp_fin_timeout до 15. И да — убили все одноразовые HTTP/1.1-коннекты. Подробнее: https://ftops.space/?utm_source=telegram&utm_medium=smm&utm_campaign=ftops&utm_content=tcp-time-wait-agoniya-pochemu-tcp-tw

Инцидент начался с резкого падения RPS на Traefik-ноде. Мониторинг показывал «connection refused», но netstat -s не выявлял переполнения listen backlog | Сетка — социальная сеть от hh.ru