hostprofi.ru
Подобрать хостинг
Термин·буква P

PHP-FPM

краткое определение

PHP-FPM (FastCGI Process Manager) — реализация FastCGI для PHP с управлением пулом процессов. Позволяет веб-серверу (Nginx, Apache) передавать PHP-запросы отдельному процессу-менеджеру, который управляет воркерами, изолирует запросы и задаёт лимиты ресурсов.

PHP-FPM (FastCGI Process Manager) — менеджер процессов PHP, работающий как отдельный демон. Веб-сервер (Nginx, Apache) общается с PHP-FPM через FastCGI-протокол (обычно через Unix-сокет или TCP-порт 9000). PHP-FPM управляет пулом PHP-воркеров, перезапускает зависшие процессы и контролирует потребление памяти.

Архитектура

PHP-FPM запускает master-процесс и несколько worker-процессов (согласно настройке пула). Каждый воркер — отдельный PHP-процесс с полным интерпретатором. Master следит за воркерами: перезапускает упавшие, добавляет новые при росте нагрузки, уничтожает лишние в простое.

Режимы управления воркерами (pm в php-fpm.conf):

  • static — фиксированное число процессов. Предсказуемое потребление памяти.
  • dynamic — от min до max воркеров, создаются и уничтожаются по нагрузке.
  • ondemand — воркеры создаются только под запросы, уничтожаются через idle-timeout. Экономит RAM на слабых VPS.

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

Пример конфига Nginx для передачи PHP-запросов:

location ~ \.php$ {
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

История

PHP-FPM разработан Андрей Нигматулиным в 2004 году как сторонний патч. С PHP 5.3.3 (2010) PHP-FPM вошёл в основной дистрибутив PHP как --enable-fpm. До PHP-FPM стандартным способом запуска PHP был mod_php в Apache — модуль, запускающий PHP в процессе Apache. Переход на Nginx + PHP-FPM произошёл в 2010-х годах с ростом популярности Nginx.

Связь с хостингом

PHP-FPM — стандарт для продакшн-серверов с Nginx. На виртуальном хостинге PHP обычно работает через mod_php или как CGI. На VDS/выделенных серверах рекомендуется PHP-FPM с пулами под каждый сайт: изоляция воркеров предотвращает ситуацию, когда один сайт потребляет всю RAM. Лимиты через pm.max_children и request_terminate_timeout защищают от зависших скриптов.

PHP-FPM vs mod_php

mod_php встраивает PHP в каждый процесс Apache: если Apache создаёт 100 worker-процессов, каждый из них несёт PHP в памяти (~30--50 МБ). Итого -- 3--5 ГБ RAM только на PHP-интерпретатор. PHP-FPM запускает отдельный пул PHP-воркеров, независимый от веб-сервера. С Nginx + PHP-FPM: Nginx работает асинхронно и обрабатывает тысячи соединений в нескольких процессах, PHP-FPM держит 20--50 воркеров в пуле. Суммарное потребление RAM в 5--10 раз ниже. PHP-FPM поддерживает несколько пулов с разными настройками для разных сайтов: site1 с PHP 8.1 и 256 МБ памяти, site2 с PHP 8.3 и 512 МБ.

Настройка PHP-FPM

Ключевые параметры пула: pm.max_children (максимум воркеров), pm.start_servers (стартовое число), pm.min_spare_servers/pm.max_spare_servers. Режим pm: static (фиксированное число), dynamic (авторегулирование), ondemand (воркеры создаются по запросу). Для production рекомендуется dynamic. Slow log в PHP-FPM записывает запросы медленнее порога: request_slowlog_timeout = 5s -- незаменимо для диагностики. Хостинг PHP на современных серверах использует PHP-FPM как стандарт. OPcache совместно с PHP-FPM кэширует скомпилированный PHP-байткод.

История PHP-FPM

PHP-FPM создал Андрей Нигматулин как патч к PHP в 2004 году. В ядро PHP включён в версии 5.3.3 (2010). До PHP-FPM альтернативой mod_php был FastCGI (spawn-fcgi), менее надёжный. Сейчас PHP-FPM -- стандарт для любого production-деплоя PHP. В 2023 году PHP-FPM 8.3 добавил улучшенную диагностику и новые метрики мониторинга.

Другие термины

PHP-FPM — что это, определение и как работает | Справочник — hostprofi.ru