Этот вопрос проверяет практическое знание конфигурационных директив FPM пула, отвечающих за управление процессами.
Количество воркеров настраивается в конфигурационном файле пула PHP-FPM (обычно www.conf) с помощью нескольких ключевых директив. Основные из них: pm (менеджер процессов), pm.max_children (общее максимальное количество воркеров), pm.start_servers (количество воркеров при старте), pm.min_spare_servers (минимальное количество свободных воркеров) и pm.max_spare_servers (максимальное количество свободных воркеров). Эти значения подбираются в зависимости от доступной оперативной памяти и ожидаемой нагрузки.
Настройка производительности PHP-FPM заключается в правильной конфигурации пула процессов. Это делается в файле, обычно расположенном в /etc/php/8.x/fpm/pool.d/www.conf.
pm (process manager)
Определяет алгоритм управления процессами.
static — фиксированное количество воркеров (pm.max_children).
dynamic — гибкое количество воркеров в заданных пределах (наиболее популярный).
ondemand — воркеры создаются только при поступлении запроса.
pm.max_children
Самая важная директива. Задает абсолютный максимум одновременно работающих воркеров.
Как рассчитать: (Общая память сервера - Запас на ОС и другое) / Средний размер памяти на 1 PHP-процесс.
Директивы для режима dynamic:
pm.start_servers — количество воркеров, запускаемых при старте FPM.
pm.min_spare_servers — минимальное количество простаивающих воркеров. Если меньше, FPM создаст новые.
pm.max_spare_servers — максимальное количество простаивающих воркеров. Если больше, FPM завершит лишние.
pm.process_idle_timeout — время, через которое простаивающий воркер будет завершен (в режиме ondemand/dynamic).
; /etc/php/8.2/fpm/pool.d/www.conf
[www]
user = www-data
group = www-data
listen = /run/php/php8.2-fpm.sock
pm = dynamic
; Рассчитано для сервера с 2GB RAM и ~50MB на процесс
pm.max_children = 30
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 10
pm.max_requests = 500 ; Перезапускать воркер после обработки 500 запросов для борьбы с утечками памятиВывод: Настройка количества воркеров — это баланс между производительностью и потреблением памяти. Режим dynamic является наиболее гибким. Необходимо мониторить использование памяти и загрузку CPU, чтобы подобрать оптимальные значения, особенно для pm.max_children.