Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
TCP: too many orphaned sockets Linux / DevOps

TCP: too many orphaned sockets — Исправление утечки сокетов-сирот в Linux

Обновлено: 18.08.2026  ·  Официальная база знаний

Архитектура ошибки и симптомы сбоя

Сообщение «TCP: too many orphaned sockets» генерируется сетевым стеком ядра Linux. «Сокет-сирота» (Orphan Socket) — это TCP-соединение, которое больше не привязано ни к одному файловому дескриптору пользовательского процесса (например, веб-сервер закрыл соединение через close()), но ядро продолжает удерживать его для корректной передачи оставшихся данных или завершения процедуры закрытия (состояния FIN_WAIT_1, FIN_WAIT_2, CLOSING, LAST_ACK). Когда число таких сокетов превышает значение tcp_max_orphans, ядро принудительно сбрасывает (RST) новые соединения.

Диагностическая таблица параметров сбоя

ПараметрЗначениеИнженерный смысл сбоя
tcp_max_orphansInteger (Лимит)Максимально допустимое количество непривязанных к процессам TCP-сокетов.
Orphan SocketFIN_WAIT_1 / LAST_ACKСокет в процессе закрытия, удерживаемый исключительно сетевым стеком ядра.
Penalty ActionTCP RST & Log SpamЯдро немедленно разрывает соединение сбросом RST и пишет предупреждение в dmesg.

Пошаговое дерево решений и сценарии траблшутинга

Сценарий 1: Анализ текущего количества orphaned-сокетов

# Просмотр статистики сокетов-сирот:
cat /proc/net/sockstat
# Ищите строку: TCP: inuse ... orphan <COUNT>

# Подсчет сокетов в фазах закрытия через ss:
ss -ant state fin-wait-1 or state fin-wait-2 or state last-ack | wc -l

Сценарий 2: Увеличение лимита tcp_max_orphans и ускорение закрытия FIN

Увеличьте лимит сокетов-сирот и сократите время удержания соединений в состоянии FIN-WAIT-2:

# Внесите правки в /etc/sysctl.d/99-tcp-orphans.conf:
cat <<EOF | sudo tee /etc/sysctl.d/99-tcp-orphans.conf
# Увеличение лимита orphaned-сокетов:
net.ipv4.tcp_max_orphans = 262144

# Сокращение времени ожидания FIN от удаленной стороны с 60 до 15 секунд:
net.ipv4.tcp_fin_timeout = 15

# Сокращение количества повторов пакетов FIN:
net.ipv4.tcp_orphan_retries = 2
EOF
sudo sysctl -p /etc/sysctl.d/99-tcp-orphans.conf

Сценарий 3: Оптимизация тайм-аутов на стороне Web-сервера (Nginx / Apache)

# В /etc/nginx/nginx.conf настройте таймауты сброса неактивных клиентов:
keepalive_timeout 15s;
reset_timedout_connection on;
client_body_timeout 10s;
send_timeout 10s;
Тысячи соединений зависают в состоянии FIN_WAIT?
Инженеры ITSTM настроят тонкий тюнинг сетевых таймаутов, оптимизируют конфигурации реверс-прокси и устранят зависания сетевых демонов.
Практический опыт инженера: При написании кастомных сетевых микросервисов на Go/C++/NodeJS всегда используйте setsockopt с опцией SO_LINGER (l_onoff=1, l_linger=0) для экстренного освобождения ресурсов сокета при аварийных сбоях.

Частые вопросы (FAQ)

Почему возникают сокеты-сироты (Orphan Sockets)?

Они возникают, когда приложение закрыло сокет со своей стороны (завершило работу с клиентом), но клиент в интернете медленно подтверждает прием данных или потерял связь, оставив соединение висеть на стороне ядра сервера.

Сколько памяти занимает каждый orphaned-сокет?

Каждый сокет-сирота потребляет до 64 КБ невыгружаемой физической памяти (в зависимости от размера wmem/rmem). Лимит tcp_max_orphans защищает сервер от исчерпания памяти при атаках медленными клиентами (Slowloris).

Помогает ли параметр net.ipv4.tcp_tw_reuse при ошибке orphaned sockets?

Параметр tcp_tw_reuse помогает повторно использовать сокеты в состоянии TIME_WAIT, но не влияет напрямую на orphaned-сокеты в состояниях FIN_WAIT_1 или LAST_ACK.

Что делает директива reset_timedout_connection on в Nginx?

Она заставляет Nginx принудительно закрывать зависшие по таймауту клиентские сокеты отправкой пакета TCP RST с немедленным обнулением структур сокета в ядре, не дожидаясь длительного цикла FIN-ACK.