PHP-FPM: pm, pm.max_children и другие числа процессов
Каждый процесс PHP-FPM обрабатывает один запрос за раз, поэтому число процессов — это сколько запросов к PHP сайт выполнит одновременно. Его задают строки pm в файле пула. В Ubuntu стоит pm = dynamic: от 1 до 5 процессов.
Содержание 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_children | 5 | больше процессов не будет ни в одном режиме |
pm.start_servers | 2 | сколько процессов запустить при старте (dynamic) |
pm.min_spare_servers | 1 | если свободных процессов меньше — запускаются новые (dynamic) |
pm.max_spare_servers | 3 | если свободных больше — лишние закрываются (dynamic) |
pm.max_requests | 0 | после скольких запросов процесс перезапустить; 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, процессу разрешено занять больше, — подробнее.
Как поменять настройки
- Откройте файл пула:
sudo nano /etc/php/8.3/fpm/pool.d/www.conf. Если система спросит пароль, введите пароль своего пользователя на сервере. Символы при вводе не видны — наберите пароль и нажмите Enter. - Нажмите Ctrl+W, введите
pm =и нажмите Enter — курсор встанет на строку с этой настройкой. Строки с «;» в начале PHP не читает. - Впишите новое значение, например
pm = ondemandилиpm.max_children = 10. - Сохраните файл: Ctrl+O, Enter, затем Ctrl+X.
- Проверьте настройки:
sudo php-fpm8.3 -t. В ответе должно бытьtest is successful. Если вместо этого ошибка — в ней названа строка, которую нужно исправить. - Перезапустите PHP-FPM:
sudo systemctl restart php8.3-fpm. Если команда ничего не ответила, PHP перезапущен.
Как посмотреть процессы
ps -eo user,comm | grep php-fpmСтрока с root — главный процесс, остальные — рабочие процессы пула. Сколько строк с www-data, столько процессов сейчас запущено. В режиме ondemand без посетителей их может не быть вовсе.
Источники
- Образец www.conf из PHP 8.3.6 — pm = dynamic, pm.max_children = 5, pm.start_servers = 2, pm.min_spare_servers = 1, pm.max_spare_servers = 3.
- Справка PHP: настройки PHP-FPM — pm: static, dynamic или ondemand; pm.process_idle_timeout по умолчанию 10 секунд; php_admin_value нельзя переопределить через ini_set().
- Исходный код PHP 8.3.6: fpm_conf.c — проверки чисел pm: min и max_spare_servers не больше pm.max_children, pm.start_servers между ними.
Сверено 14 октября 2026 года.
Что почитать дальше
- server reached pm.max_childrenчто делать, когда процессов не хватает.
- 502 Bad Gatewayесли PHP-FPM не запускается.
- Настройки PHP для одного сайтаотдельный пул со своими числами.
- Настройки PHPглавные настройки и где их задают.