Вступить в клуб →
сложнаявопросСети в Linux: сокеты, epoll и Boost.Asio

Сервер телеметрии упёрся в лимит дескрипторов из-за мёртвых соединений

5000 устройств держат постоянные TCP-соединения с сервером и шлют данные раз в минуту. Устройства часто теряют питание. Через неделю сервер перестаёт принимать подключения: accept возвращает EMFILE. ss показывает 65 000 соединений в состоянии ESTABLISHED, хотя реально на связи 5000 устройств. Данных по «лишним» соединениям не приходит сутками.

Что нужно добавить?

  • Таймаут неактивности или heartbeat на уровне протокола
  • Поднять ulimit -n до миллиона дескрипторов
  • Включить SO_REUSEADDR на слушающем сокете
  • Ждать recv = 0 от отключившихся устройств

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела