Что вы будете делать в случае разрыва соединения на сервере?

«Что вы будете делать в случае разрыва соединения на сервере?» — вопрос из категории Сети, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Я буду следовать системному подходу к диагностике, двигаясь по уровням сетевого стека (от приложения к сети).

1. Диагностика на уровне приложения и сервера:

  • Проверю статус и логи сервиса: sudo systemctl status nginx, sudo journalctl -u nginx --since "5 minutes ago".
  • Убежусь, что процесс слушает ожидаемый порт: sudo ss -tlnp | grep :80 или sudo netstat -tulnp | grep :80.
  • Протестирую локальную доступность: curl -v --connect-timeout 5 http://localhost/health.

2. Проверка системных ресурсов и конфигурации:

  • Исключу нехватку ресурсов: top, free -h, df -h. Высокая нагрузка на CPU/память или заполнение inodes могут приводить к отказам.
  • Проверю лимиты файловых дескрипторов: cat /proc/$(pidof nginx)/limits | grep "open files". При исчерпании лимита новые соединения приниматься не будут.
  • Валидирую конфигурацию веб-сервера: sudo nginx -t.

3. Анализ сетевого стека и правил:

  • Проверю, не блокирует ли соединения межсетевой экран: sudo iptables -L -n -v или sudo nft list ruleset.
  • Изучу системные сетевые параметры, которые могут влиять на количество соединений (например, net.core.somaxconn, net.ipv4.tcp_max_syn_backlog).
  • Использую tcpdump для анализа трафика на интерфейсе: sudo tcpdump -i eth0 port 80 -n.

4. Восстановление и мониторинг:

  • Если причина найдена и устранена, выполню graceful restart сервиса: sudo systemctl reload nginx.
  • Настрою алертинг на ключевые метрики (количество активных соединений, ошибки) в Prometheus/Grafana для раннего обнаружения подобных инцидентов в будущем.

Пример быстрой проверки состояния сокетов для веб-сервера:

# Показать все TCP-сокеты в состоянии LISTEN
sudo ss -tln
# Показать количество соединений в разных состояниях для порта 80
sudo ss -tan | grep ':80 ' | awk '{print $1}' | sort | uniq -c