pm.max_children задаёт число одновременно работающих PHP-процессов. Слишком мало создаёт очередь, слишком много приводит к swap и падению всего сервера.
Сначала измеряем
Под реальной нагрузкой найдите средний и верхний размер RSS процессов:
ps --no-headers -o rss,cmd -C php-fpm | sort -n
Если для PHP безопасно выделить 2 ГБ, а тяжёлый процесс занимает 120 МБ, начальная верхняя граница — около 16, но оставьте память системе, базе, OPcache и пикам. После расчёта наблюдайте, а не считайте число окончательным.
Для обычного сайта подходит pm = dynamic:
pm.max_children = 16
pm.start_servers = 4
pm.min_spare_servers = 4
pm.max_spare_servers = 8
pm.max_requests = 500
request_terminate_timeout = 120s
Проверка очереди
Включите pm.status_path и отдавайте status page только локальному мониторингу. Смотрите listen queue, max listen queue, active processes и max active processes. Частый max children reached означает нехватку воркеров или слишком долгие запросы; сначала ищите медленные запросы и внешние API.
После изменения выполните тест конфигурации вашей версии PHP-FPM и reload. Резкое увеличение лимита без проверки памяти опасно.
Официальные источники