Пришла заявка на то, что один из Nginx серверов недоступен. Сама виртуальная машина работает, однако, замечаю, что она светится красным по CPU. В событиях есть ошибка:
Alarm 'Virtual machine CPU usage' changed from Green to Red

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

Проблема явно есть, здесь получаем более точное время проблемы. Это 18:04.
Открываю консоль KVM и вижу, что в STDERR есть записи о том, что nginx убит по OOM, и прочие сервисы типа redis тоже убиты по OOM.
Удаётся зайти на машину по SSH. Смотрим htop. Память свободна, но все процессы nginx в 100%.

Берем 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. Вероятно, проблема именно в одном из модулей. Данные траблшутинга отправляю разработчикам. Перезагружаю сервер.

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