Недавно я столкнулся с проблемой использования процессов php-fpm (как и количества активных процессов), достигая максимума доступных процессов и тем самым прекратив выполнение других скриптов до тех пор, пока не закончились проблемные процессы.
Более подробно, мои текущие настройки php-fpm:
pm = static
pm.max_children = 100
Я смотрю страницу статуса php-fpm, которая показывает большую часть времени:
total processes: 100
idle processes: 95-99
active processes: 1-5
что является нормальным. Тем не менее, каждые несколько минут количество активных процессов перескакивает до 100 в течение нескольких секунд, а затем возвращается к нормали 1-5. в то время все остальные скрипты, запущенные на сервере, просто застревают в течение этого периода времени. (Из браузера вы просто видите, что страница ждет).
Теперь я проверил, не влияет ли его на конкретные трафик трафика, но его нет. он также может иметь место с наименьшим количеством трафика дня.
Я считаю, что определенный script, может быть, даже в особых ситуациях, заставляет php просто использовать все доступные процессы по какой-либо причине.
Эта проблема началась, когда мы перешли на PHP 5.4.X из 5.2.X
В настоящее время у нас есть около 60 веб-сайтов, поэтому его любопытство проходит через каждый веб-сайт и проверяет его.
В nginx-журналах ничего нет (ничто не критично, есть несколько уведомлений и т.д.).
То, что я пытаюсь сделать, - это как-то трассировка/профиль/монитор, которые php-fpm script использует процессы, поэтому я буду знать, с чего начать поиск проблемы.
Возможно ли это? Может быть, другой подход?
Обновление
Вот график процесса процесса PHP-FPM за 1 час, с интервалом в 1 мин:
Я покрасил прыжки, о которых я говорю. Использование памяти во время всплеска остается тем же самым