Настройка PHP-FPM: пулы, воркеры и оптимизация производительности

PHP · 19.04.2026
Настройка PHP-FPM: пулы, воркеры и оптимизация производительности

Что такое PHP-FPM и зачем его настраивать

PHP-FPM (FastCGI Process Manager) — менеджер процессов PHP, который запускает PHP как отдельный сервис. В связке с Nginx он обеспечивает высокую производительность: Nginx обрабатывает статику, а PHP-FPM — динамические запросы. Правильная настройка PHP-FPM позволяет обслуживать в 2–5 раз больше запросов без увеличения RAM.

Файл конфигурации пула

Основной файл пула находится в /etc/php/8.x/fpm/pool.d/www.conf. Откройте его для редактирования:

sudo nano /etc/php/8.2/fpm/pool.d/www.conf

Режимы управления процессами (pm)

Параметр pm определяет, как PHP-FPM управляет дочерними процессами:

РежимОписаниеКогда использовать
staticФиксированное число процессовВысоконагруженные серверы с достаточной RAM
dynamicЧисло процессов меняется динамическиБольшинство VPS (рекомендуется)
ondemandПроцессы создаются по запросуСервер с малым трафиком, экономия RAM

Оптимальные значения pm для dynamic

pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 8
pm.max_requests = 500
Формула расчёта pm.max_children: Разделите доступную RAM на средний размер одного PHP-процесса. Пример: 2 ГБ RAM, средний процесс 80 МБ → max_children = 2048 / 80 ≈ 25. Проверьте средний размер процесса командой: ps -o rss= -C php-fpm8.2 | awk '{ sum+=$1 } END { print sum/NR/1024 " MB" }'

Slow Log — анализ медленных скриптов

Включите slow log для диагностики узких мест:

slowlog = /var/log/php8.2-fpm-slow.log
request_slowlog_timeout = 5s

Просматривайте лог командой: tail -f /var/log/php8.2-fpm-slow.log

Страница статуса PHP-FPM

Добавьте в конфиг пула:

pm.status_path = /status

В Nginx добавьте location:

location ~ ^/status$ {
    allow 127.0.0.1;
    deny all;
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Применение настроек

sudo systemctl reload php8.2-fpm
sudo systemctl status php8.2-fpm
Не перезапускайте PHP-FPM во время высокой нагрузки — используйте reload, который применяет конфиг без обрыва активных соединений.

Конфигурация Nginx для PHP-FPM

location ~ \.php$ {
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
    fastcgi_read_timeout 300;
}
← Назад в базу знаний Задать вопрос поддержке