PHP-FPM под нагрузкой: очередь запросов и занятые процессы

2 мин чтения

Как читать страницу состояния PHP-FPM и понять, почему запросы стоят в очереди.

Что проверять при росте очереди
  1. Очередь пулаСмотрим ожидание и лимит рабочих процессов
  2. Занятые процессыВыясняем, чем заняты workers
  3. ЗависимостиПроверяем базу, сеть и внешние сервисы

PHP отвечает медленнее обычного. Первая мысль — добавить рабочие процессы, но они могут ждать ту же медленную базу или внешний сервис. Страница состояния PHP-FPM показывает очередь, занятые и свободные процессы. Эти цифры помогут понять, где продолжать поиск и когда увеличение пула действительно имеет смысл.

Как открыть status page только администратору

; Фрагмент конфигурации пула PHP-FPM
pm.status_path = /fpm-status

Одного параметра недостаточно: веб-сервер должен корректно передать запрос этому пулу. Разрешайте доступ только через внутренний адрес, аутентификацию или административную сеть. Подробный режим может раскрывать сведения о запросах и скриптах. Не размещайте страницу состояния в открытом меню сайта.

Смотрим на несколько показателей

listen queue показывает ожидающие соединения, active processes — занятые процессы, idle processes — свободные. Значение max children reached помогает заметить достижение ограничения пула. Это накопительный показатель, поэтому сравнивайте его изменение с интервалом наблюдения, а не воспринимайте как текущую аварийную лампу.

Устойчивая очередь и отсутствие свободных процессов подтверждают дефицит свободной ёмкости в этот момент. Они не объясняют причину долгого удержания процесса. Сравните метрики со временем ответа базы, журналом медленных запросов и нагрузкой на систему. Для ограниченно доступной диагностики можно использовать предусмотренный версией отдельный status listener.

Когда увеличивать pm.max_children

Перед увеличением pm.max_children оцените память одного рабочего процесса и запас сервера. Дополнительные процессы могут усилить конкуренцию за базу и сделать ситуацию хуже. Сначала сохраните показатели на типичной нагрузке, затем измените один параметр и сравните очередь, задержку и ошибки.

В конце выполните обычный пользовательский запрос через сайт. Работающая status page ещё не говорит, что приложение правильно выполняет операции. С другого узла, без административного доступа, убедитесь, что сама диагностическая страница закрыта.

Источники и дальнейшее чтение