Ошибки

PHP-FPM: server reached pm.max_children setting — что делать

Все процессы PHP-FPM заняты, и новые запросы ждут в очереди. Сначала проверьте, не держат ли процессы медленные скрипты. Потом поднимите pm.max_children — столько, сколько выдержит оперативная память.

≈ 5 мин чтения
Содержание 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

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

Источники

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

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