PHP-FPM под нагрузкой: очередь запросов и занятые процессы
Как читать страницу состояния PHP-FPM и понять, почему запросы стоят в очереди.
- Очередь пулаСмотрим ожидание и лимит рабочих процессов
- Занятые процессыВыясняем, чем заняты workers
- ЗависимостиПроверяем базу, сеть и внешние сервисы
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 ещё не говорит, что приложение правильно выполняет операции. С другого узла, без административного доступа, убедитесь, что сама диагностическая страница закрыта.
