PHP-FPM Linux (PHP-FPM)

PHP-FPM: В журнале FPM появляется предупреждение об исчерпании процессов

  • Обновлено
  • Чтение ≈ 3 минуты
  • Нужны права администратора

Краткий ответ

Предупреждение о нехватке процессов PHP-FPM в журнале не всегда означает постоянное превышение pm.max_children. Например, при pm=dynamic сообщение о недостатке свободных серверов и рекомендация поднять pm.start_servers отличается от server reached pm.max_children. Сначала определите вид предупреждения и конкретный пул.

В этой статье
  1. Симптом и границы применимости
  2. Возможные причины и как их отличить
  3. Пошаговая диагностика и исправление
  4. Как проверить результат
  5. Если проблема не устранена

#Симптом и границы применимости

Предупреждение о нехватке процессов PHP-FPM в журнале не всегда означает постоянное превышение pm.max_children. Например, при pm=dynamic сообщение о недостатке свободных серверов и рекомендация поднять pm.start_servers отличается от server reached pm.max_children. Сначала определите вид предупреждения и конкретный пул.

#Возможные причины и как их отличить

Возможная причинаКак узнатьЧто делать
Мало резервных процессов при dynamicПри всплеске трафика новые дочерние процессы создаются не мгновенно.Записи pool seems busy / spawning childrenОценить pm.start_servers, min_spare_servers и max_spare_servers
Достигнут жёсткий лимитВсе доступные рабочие процессы заняты одновременно.Предупреждение server reached pm.max_childrenОценить задержки и память, а не только start_servers
Процессы завершаются и появляются сноваУвеличение количества детей не лечит аварийное завершение.Ошибки child exited on signal, OOM или crashИсследовать падения расширений и память

#Пошаговая диагностика и исправление

  1. Скопируйте конкретную строку без данных клиентовОткройте журнал FPM точной версии за интервал проблемы. Запишите имя пула в квадратных скобках и формулировку предупреждения: server seems busy, reached pm.max_children, child exited — разные причины. Не смешивайте журналы php8.2-fpm и отдельной службы панели.
  2. Дополнительная команда по теме
    Linux · Терминал (Bash)КомандаНужен sudo
    Имя и время примеры; выход содержит сведения о конфигурации, не отправляйте целиком посторонним.
    sudo journalctl -u php8.2-fpm --since "30 minutes ago" --no-pager | grep -Ei "busy|max_children|child|pool"
  1. Сверьте режим управления процессамиВ файле именно указанного пула проверьте pm и связанные директивы. Если pm=ondemand, min_spare_servers и start_servers не действуют. Для pm=dynamic их границы должны быть согласованы с max_children. Не добавляйте наугад параметры из инструкций для другого режима.
  1. Установите, хватало ли памятиВо время обычной пиковой нагрузки посмотрите свободную память и реальные размеры процессов. Если FPM процессы исчезают по OOM, сначала уменьшите потребление приложения и изучите memory_limit/память системы. Быстрые всплески можно устранять корректировкой spare-процессов только при имеющемся резерве RAM.
  2. Дополнительная команда по теме
    Linux · Терминал (Bash)Команда
    free -h; ps -eo pid,rss,cmd --sort=-rss | grep -E "php-fpm|PID" | head
  1. Отделите задержки запуска от долгих запросовЕсли предупреждение появляется при старте краткого всплеска и затем исчезает, исследуйте начальное число резервных детей. Если повторяется на ровном трафике, смотрите медленные запросы БД и внешние вызовы; мониторинг PHP-FPM status допускается только в закрытой административной сети, а не в публичном доступе.
  1. Измените один параметр по причинеСохраните копию пула. Для dynamic и частых коротких всплесков при запасе RAM аккуратно настройте pm.start_servers, pm.min_spare_servers, pm.max_spare_servers в допустимом соотношении. Если достигнут max_children, используйте измерения ёмкости отдельной статьи, а не просто повышайте start_servers. Проверьте синтаксис и перечитайте только нужную службу.
  2. Для установленной версии, команду уточнить
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Для установленной версии, команду уточнить. При ошибке проверки не применять изменения.
    sudo php-fpm8.2 -t

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

  1. Сравните логи в следующий пикПосле изменения зафиксируйте исчезновение конкретного предупреждения, время отклика PHP и запас памяти. Проверьте, что соседние пулы не испытывают нехватки ресурсов. При ухудшении верните исходный конфиг; не разгоняйте процессы, пока не найдена причина.

#Как проверить результат

Предупреждение больше не повторяется на сравнимой нагрузке, длительность запросов не выросла, память не ушла в своп и другие пулы не замедлились.

#Если проблема не устранена

Если видно child exited on signal, ищите падение расширений и системные ограничения. Если достигнут именно max_children, рассчитайте предел исходя из памяти и времени запросов.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.