Скорость
PHP-FPM загружает сервер: как найти источник нагрузки
Процессы PHP-FPM занимают ресурсы сервера, а сайт замедляется. Объясняем, как найти запросы, которые создают нагрузку, и почему перезапуск даёт лишь временный эффект.
Что происходит и с чего начать
PHP-FPM управляет процессами, выполняющими PHP-запросы сайта. Высокая загрузка может означать полезную работу при большом трафике, тяжёлый код или ожидание медленного внешнего ресурса. Поэтому число процессов само по себе не объясняет причину. Важно связать нагрузку с адресами страниц и действиями в конкретный момент. Начните с времени замедления и совпадающих задач: обменов, отчётов, рекламных переходов. Так специалист сможет исследовать реальные запросы, а не только менять лимиты процессов по общему графику.
Что можно проверить самостоятельно
- Запишите время пика и какие страницы тогда открывались медленно. Сохраните графики панели хостинга, включая процессор и память, если они доступны для этого периода.
- Уточните, какие фоновые задачи совпадают с нагрузкой. Важны обмен, резервное копирование и массовые операции в панели, а не только количество посетителей сайта.
- Сообщите, помогает ли перезапуск и на какое время. Не превращайте частые перезапуски в постоянное лечение: они могут прерывать запросы и стирать полезную картину сбоя.
Как понять результаты проверки
Разработчик или администратор смотрит медленные запросы PHP и их последовательность действий. Отдельно проверяется ожидание базы, сети и внешних API. Размер допустимого пула процессов подбирают с учётом памяти одного процесса и остальных служб сервера. Универсальное значение для всех проектов отсутствует. Если причина в повторяющемся тяжёлом запросе, сначала сокращают его стоимость или частоту. Иначе расширенный пул лишь позволит большему числу одинаково дорогих запросов одновременно расходовать доступные ресурсы.
Что проверяет разработчик
Для этой части понадобятся доступ к настройкам, журналам ошибок или коду. Её можно передать специалисту вместе с результатами предыдущих шагов.
- Проверьте CPU, память, дисковое ожидание и количество активных процессов. Низкий свободный CPU и ожидание диска требуют разных действий.
- Сопоставьте всплеск с адресами запросов в access log. Отделите реальных посетителей, роботов, повторные API-вызовы и служебные задачи.
- Используйте доступный slow log PHP-FPM для долгих запросов. Записывайте контекст без персональных данных и не публикуйте страницу статуса наружу.
На что обратить внимание
Причиной может быть дорогой цикл, тяжёлая выборка, массовая генерация файлов или поток однотипных запросов. Увеличение числа процессов при нехватке памяти способно усилить проблему.
Как исправляют причину
Ограничьте подтверждённый источник лишних запросов и исправьте затратный участок. Параметры пула выбирайте по доступной памяти и измеренному потреблению, учитывая базу и остальные службы на сервере.
Как убедиться, что проблема решена
Повторите характерную нагрузку в контролируемых условиях. Следите за временем ответа и ошибками: снижение CPU за счёт отказа обслуживать нужные запросы не решает задачу.
После исправления наблюдайте сопоставимую нагрузку и тот же сценарий. Проверьте ошибки и время ожидания посетителей, а не только уменьшение числа процессов. Если менялись лимиты, убедитесь, что сервер не начал активно использовать медленную подкачку памяти. Полезный результат — устойчивое обслуживание обычных запросов без регулярного ручного перезапуска и с объяснёнными пределами при более высокой нагрузке.