Назад | Перейти на главную страницу

Рабочие nginx складываются при 100% использовании через X случайных дней

Я столкнулся со странным инцидентом, при котором два моих рабочих 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). Ознакомьтесь со всем стеком и с тем, что он делает.