Справочник

PHP-FPM: pm, pm.max_children и другие числа процессов

Каждый процесс PHP-FPM обрабатывает один запрос за раз, поэтому число процессов — это сколько запросов к PHP сайт выполнит одновременно. Его задают строки pm в файле пула. В Ubuntu стоит pm = dynamic: от 1 до 5 процессов.

≈ 4 мин чтения
Содержание 8

Что сделать прямо сейчас

Команды вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне. Посмотрите, как настроены процессы:

ivan@myserver:~$ grep '^pm' /etc/php/8.3/fpm/pool.d/www.conf
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

Так выглядит ответ, если настройки не меняли. Команды — для PHP 8.3 из Ubuntu 24.04. В Ubuntu 26.04 стоит PHP 8.5: в путях и командах вместо 8.3 пишите 8.5. Какая версия у вас, покажет ls /etc/php/. Если в журнале есть запись server reached pm.max_children, процессов не хватает — разбор этой записи.

Три режима pm

РежимКак работаетКогда подходит
dynamicдержит несколько процессов наготове, добавляет и убирает их по нагрузкестоит в Ubuntu, подходит для одного-двух сайтов
staticдержит ровно pm.max_children процессовсервер только для одного сайта и памяти хватает на все процессы
ondemandне держит процессов, пока нет запросов; лишние закрывает после простоямало памяти или на сервере много маленьких сайтов

В режиме ondemand первый запрос после простоя ждёт запуска процесса. Процесс без работы закрывается через pm.process_idle_timeout — по умолчанию 10 секунд.

Что значат числа

СтрокаВ UbuntuЧто задаёт
pm.max_children5больше процессов не будет ни в одном режиме
pm.start_servers2сколько процессов запустить при старте (dynamic)
pm.min_spare_servers1если свободных процессов меньше — запускаются новые (dynamic)
pm.max_spare_servers3если свободных больше — лишние закрываются (dynamic)
pm.max_requests0после скольких запросов процесс перезапустить; 0 — не перезапускать

PHP-FPM не запустится, если min или max_spare_servers больше pm.max_children, а pm.start_servers меньше min или больше max_spare_servers. Ошибку покажет проверка sudo php-fpm8.3 -t.

pm.max_requests в файле закомментирован. Задайте, например, 500, если память процессов растёт с каждым запросом: так процесс будет перезапускаться и отдавать её.

Как выбрать pm.max_children

Число ограничено памятью: каждый процесс занимает свою, и все вместе не должны занять больше, чем свободно на сервере. Как посчитать — сколько процессов выдержит память. Если поднять memory_limit, процессу разрешено занять больше, — подробнее.

Как поменять настройки

  1. Откройте файл пула: sudo nano /etc/php/8.3/fpm/pool.d/www.conf. Если система спросит пароль, введите пароль своего пользователя на сервере. Символы при вводе не видны — наберите пароль и нажмите Enter.
  2. Нажмите Ctrl+W, введите pm = и нажмите Enter — курсор встанет на строку с этой настройкой. Строки с «;» в начале PHP не читает.
  3. Впишите новое значение, например pm = ondemand или pm.max_children = 10.
  4. Сохраните файл: Ctrl+O, Enter, затем Ctrl+X.
  5. Проверьте настройки: sudo php-fpm8.3 -t. В ответе должно быть test is successful. Если вместо этого ошибка — в ней названа строка, которую нужно исправить.
  6. Перезапустите PHP-FPM: sudo systemctl restart php8.3-fpm. Если команда ничего не ответила, PHP перезапущен.

Как посмотреть процессы

ps -eo user,comm | grep php-fpm

Строка с root — главный процесс, остальные — рабочие процессы пула. Сколько строк с www-data, столько процессов сейчас запущено. В режиме ondemand без посетителей их может не быть вовсе.

Источники

Сверено 14 октября 2026 года.

Что почитать дальше