Перейти к основному содержанию

Завис nginx — траблшутинг

Nginx

Пришла заявка на то, что один из Nginx серверов недоступен. Сама виртуальная машина работает, однако, замечаю, что она светится красным по CPU. В событиях есть ошибка:

 Alarm 'Virtual machine CPU usage' changed from Green to Red

nginx

Проблема возникла вчера в 18:13. Смотрим исторические значения CPU в Zabbix.

nginx

Проблема явно есть, здесь получаем более точное время проблемы. Это 18:04.

Открываю консоль KVM и вижу, что в STDERR есть записи о том, что nginx убит по OOM, и прочие сервисы типа redis тоже убиты по OOM.

Удаётся зайти на машину по SSH. Смотрим htop. Память свободна, но все процессы nginx в 100%.

nginx

Берем PID одного процесса и смотрим что он делает.

# strace -p 753985 -f -e trace=file,network
strace: Process 753985 attached

Ждём 10 минут, в терминале тишина. Значит процесс не делает никаких системных вызовов (файловых операций и сетевых), но при этом показывает 100% CPU в htop. Это классический признак бесконечного цикла в пользовательском пространстве — процесс крутится внутри кода nginx или модуля, не обращаясь к ядру.

Смотрим что было:

journalctl -u nginx --since "5 minutes ago" | grep -E "error|fatal|segfault|emerg|alert|panic|loop|timeout|deadlock|stuck"

Дальше анализируем логи. Ещё немного дебага, поищем повторяющиеся сообщения, которые могут символизировать о бесконечном цикле.  Видны ошибки, последняя в 19:04, потом ошибок не было, видимо, все процессы nginx попали в бесконечный цикл, а в самом цикле сообщений об ошибках не было.

Мой nginx использует сторонние модули LUA. Вероятно, проблема именно в одном из модулей. Данные траблшутинга отправляю разработчикам. Перезагружаю сервер.

nginx

Проблема ушла, сервер работает. Остальные ноды в кластере балансировщиков и так нормально работали, значит, ошибка какая-то специфическая и редкая. Дальше пусть разработчики разбираются.

Теги

 

Похожие материалы

Заглушка для технических работ на Nginx

Иногда сайт нужно вывести из эксплуатации для проведения технических работ. Это может быть процесс резервного копирования, обновление, изменение конфигурации, перенос данных, или восстановление.

Теги