Сервер телеметрии упёрся в лимит дескрипторов из-за мёртвых соединений
5000 устройств держат постоянные TCP-соединения с сервером и шлют данные раз в минуту. Устройства часто теряют питание. Через неделю сервер перестаёт принимать подключения: accept возвращает EMFILE. ss показывает 65 000 соединений в состоянии ESTABLISHED, хотя реально на связи 5000 устройств. Данных по «лишним» соединениям не приходит сутками.
Что нужно добавить?
- Таймаут неактивности или heartbeat на уровне протокола
- Поднять ulimit -n до миллиона дескрипторов
- Включить SO_REUSEADDR на слушающем сокете
- Ждать recv = 0 от отключившихся устройств
