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