Я столкнулся со странным инцидентом, при котором два моих рабочих nginx внезапно получают стек со 100% загрузкой ЦП через случайное количество дней и с тем же веб-трафиком, при котором они ведут себя нормально в другие дни.
Он обслуживает легкий трафик из 5 одновременных запросов в секунду, а конфигурация моего рабочего nginx настроена следующим образом:
user www-data;
worker_processes auto;
worker_cpu_affinity auto;
worker_rlimit_nofile 100000;
pid /run/nginx.pid;
pcre_jit on;
events
{
multi_accept on;
worker_connections 2048;
accept_mutex on;
use epoll;
}
Независимо от того, изменю ли я процесс на автоматический или на статический (я пробовал 1), я получаю 100%, начиная примерно через 6 дней. Вот скриншот моего текущего htop: Скриншот
Если я перезапущу службу nginx, загрузка вернется в норму. Через 5-6 дней снова выйдет на 100%.
Я пробовал использовать такие инструменты, как ngxtop, но я не могу определить настоящую причину нагрузки, а только чтобы убедиться, что это не происходит из источника веб-сайта.
Я также перезапустил php7.3-fpm, и загрузка процессора nginx по-прежнему составляет 100%, что означает, что что-то еще идет не так.
Мне не известны какие-либо инструменты отладки для такого случая, и я был бы заранее признателен, если вы подскажете мне, какие инструменты нужны для его отладки.
Полезная информация:
Я использую WordOps готовый скрипт стека. Nginx находится на версии 1.14.2
В Linux легко определить, какой именно код находится на процессоре.
Установите символы отладки ядра и вашего приложения (nginx), чтобы имена функций были удобочитаемы.
Бегать perf top
чтобы увидеть верхние символы на ЦП. ссылка perf_events
Создать визуализация графика пламени используя perf или bcc.
Просмотрите базовое использование с помощью нескольких полезных инструментов. Или посмотрите на netdata по тому же самому.
uptime
dmesg | tail
vmstat 1
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -m
sar -n DEV 1
sar -n TCP,ETCP 1
top
Затем сложная часть: определить, что его вызывает. Может быть код приложения (PHP?), Может быть веб-сервер (nginx), может быть настройка ОС (Linux). Ознакомьтесь со всем стеком и с тем, что он делает.