PHP-FPM: server reached pm.max_children setting — что делать
Все процессы PHP-FPM заняты, и новые запросы ждут в очереди. Сначала проверьте, не держат ли процессы медленные скрипты. Потом поднимите pm.max_children — столько, сколько выдержит оперативная память.
Содержание 8
Как выглядит ошибка
Сайт тормозит или отвечает 502 и 504, когда заходит много посетителей. В журнале PHP-FPM — sudo tail -n 30 /var/log/php8.3-fpm.log — есть запись:
WARNING: [pool www] server reached pm.max_children setting (5), consider raising it[pool www]— пул, группа процессов PHP-FPM. В Ubuntu пул один — www, его настройки в файле/etc/php/8.3/fpm/pool.d/www.conf.pm.max_children setting (5)— наибольшее число процессов, которое разрешено. 5 стоит в настройках Ubuntu, пока их не меняли.consider raising it— PHP-FPM советует поднять это число.
Каждый процесс обрабатывает один запрос за раз. Если заняты все — новые запросы ждут. Когда очередь переполнится, nginx ответит 502, а если ждать придётся дольше 60 секунд — 504. Запись появляется один раз, когда процессы кончились, и снова — только после того, как их стало меньше предела.
Команды вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне. Команды — для PHP 8.3 из Ubuntu 24.04. В Ubuntu 26.04 стоит PHP 8.5: в путях и командах вместо 8.3 пишите 8.5. Какая версия у вас, покажет ls /etc/php/.
Сначала проверьте, чем заняты процессы
Пять процессов успевают обслужить много посетителей, если каждая страница собирается за доли секунды. Если же скрипты работают по 10–30 секунд, процессы кончатся и при небольшом числе посетителей, а новые только займут память. Как найти медленные скрипты — Ошибка 504.
Если процессы кончаются из-за ботов, которые перебирают страницы, их число поднимать бесполезно: сначала разберитесь, кто нагружает сайт.
Сколько процессов выдержит память
Каждый процесс PHP-FPM занимает свою память. Узнайте средний размер одного процесса:
ps -C php-fpm8.3 -o rss= | awk '{s+=$1} END {print int(s/NR/1024)}'Команда выведет одно число — сколько мегабайт в среднем занимает процесс. Теперь посмотрите, сколько памяти свободно:
free -mВ строке Mem: смотрите колонку available — столько памяти ещё могут получить программы (подробнее о free). Разделите эту память на размер процесса и оставьте запас для базы данных и других программ.
Например, если PHP можно отдать 1 000 МБ, а процесс занимает 50 МБ, ставьте не больше 20. Если поставить больше, чем выдержит память, сервер начнёт закрывать программы — Out of memory.
Как поднять pm.max_children
- Откройте настройки пула:
sudo nano /etc/php/8.3/fpm/pool.d/www.conf. Если система спросит пароль, введите пароль своего пользователя на сервере. Символы при вводе не видны — наберите пароль и нажмите Enter. - Нажмите Ctrl+W, введите pm.max_children = и нажмите Enter — курсор встанет на строку с этой настройкой. Строки со знаком ; в начале PHP не читает — если курсор встал на такую, нажмите Ctrl+W и Enter ещё раз.
- Поставьте своё число, например
pm.max_children = 20. - Сохраните файл: Ctrl+O, Enter, Ctrl+X.
- Проверьте настройки:
sudo php-fpm8.3 -t. В ответе должно бытьtest is successful. Если вместо этого ошибка — в ней указана настройка, которую нужно исправить. - Перезапустите PHP:
sudo systemctl restart php8.3-fpm. Если команда ничего не ответила, PHP перезапущен.
Остальные числа в файле — pm.start_servers, pm.min_spare_servers и pm.max_spare_servers — задают, сколько процессов держать наготове. Ни одно из них не может быть больше pm.max_children, а pm.start_servers должен быть между min и max. Если вы их не трогали, после подъёма pm.max_children менять их не нужно.
Запись seems busy
WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning …Это не ошибка: PHP-FPM видит, что свободных процессов нет, и запускает новые сверх тех, что держит наготове. Предела pm.max_children он при этом не превышает. Если такие записи идут одна за другой, поднимите pm.max_spare_servers — например, до половины pm.max_children.
Ошибки рядом
| Что видите | Что делать |
|---|---|
502 Bad Gateway, Resource temporarily unavailable в журнале nginx | не хватает процессов PHP-FPM |
| 504 Gateway Timeout | ищите медленные скрипты |
Out of memory: Killed process | памяти не хватило |
Maximum execution time … exceeded | скрипт работал дольше лимита |
| другая ошибка PHP | найдите её в списке |
Источники
- Исходный код PHP 8.3.6: fpm_process_ctl.c — тексты server reached pm.max_children setting и seems busy.
- Образец 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.max_children — сколько запросов обрабатывается одновременно; request_terminate_timeout.
- Исходный код PHP 8.3.6: fpm_conf.c — проверка настроек: pm.min_spare_servers и pm.max_spare_servers не больше pm.max_children, pm.start_servers между ними.
- Справка ps для Ubuntu 24.04 — колонка RSS — сколько памяти процесс занимает сейчас, в кибибайтах.
Сверено 14 октября 2026 года.
Что почитать дальше
- Ошибки PHPкак читать сообщение и где журнал.
- Команда freeсколько памяти свободно.
- Процессы: ps, top, killкто занял память и процессор.