PHP-FPM LinuxPHP 8.xNginx/Apache

PHP-FPM: slowlog остаётся пустым при зависающих запросах

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

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

В отличие от общей инструкции включения slowlog, здесь важна проверка именно отсутствия записей: медленный ответ браузера не всегда означает долгое выполнение скрипта в PHP-FPM.

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

#Симптомы и отличие от похожих неисправностей

Веб-страницы иногда открываются по минуте, однако журнал медленных PHP-запросов пуст. Разбираем порог request_slowlog_timeout, правильный пул, путь slowlog, таймауты прокси и ситуацию, когда зависание происходит до PHP. В отличие от общей инструкции включения slowlog, здесь важна проверка именно отсутствия записей: медленный ответ браузера не всегда означает долгое выполнение скрипта в PHP-FPM.

Возможная причинаКак узнатьЧто делать
Не включён порог записи или редактируется не тот пулПо умолчанию request_slowlog_timeout=0; внесённое изменение может относиться к другой версии PHP.В активном пуле значение 0, либо приложение использует другой сокет.Сверить FastCGI и конфигурацию пула.
Запрос простаивает до попадания в рабочий процессОчередь FPM заполнена, либо DNS и TLS забирают время на стороне прокси, когда PHP ещё не выполняется.Длительность в Nginx большая, но активное время скрипта мало.Сравнить request_time, upstream и FPM status.
Файл журнала недоступен для записиУ slowlog неправильный путь, файловая система заполнена, нет разрешений или после ротации исчез файл.Появились ошибки открытия журнала, но новых записей нет.Проверить лог FPM и файл с владельцем.

#Диагностика и пошаговое устранение

  1. Зафиксируйте один медленный URL и времяВ браузере повторите конкретное действие на тестовом аккаунте: например, откройте отчёт или карточку. Запишите адрес без параметров доступа, время и длительность. В журнале доступа Nginx/Apache найдите эту строку по минуте и коду. Если HTML быстро отдан, но вкладка долго загружает сторонние изображения, slowlog PHP не поможет: сначала изучайте загрузку ресурсов в инструментах разработчика браузера.
  1. Проверьте, что запрос действительно исполнялся в нужном PHP-FPMВ конфигурации домена найдите fastcgi_pass, затем в пуле PHP-FPM — директиву listen. Проверьте конкретную версию в панели. Если fastcgi_pass ведёт на другую службу или даже на Apache с обработчиком mod_php, включение slowlog в текущем пуле никак не отразится на запросах. Запишите старые значения и путь активного пула перед изменениями.
  1. Уточните значения всех трёх параметров записиОткройте файл пула в панели или редакторе администратора: найдите slowlog, request_slowlog_timeout, request_slowlog_trace_depth. Для диагностики порог можно временно поставить 5s, если запросы воспроизводимо занимают 15–20 секунд; значение 0 выключает запись. Учитывайте, что слишком низкий порог на оживлённом сервере создаст много записей и может заполнить диск. Запишите прежние значения для отката.
  2. Пример только для диагностики
    INI
    Пример только для диагностики. Каталог журнала должен существовать, иметь надлежащие права, а путь — соответствовать выбранному пулу.
    slowlog = /var/log/php-fpm/example-slow.log
    request_slowlog_timeout = 5s
    request_slowlog_trace_depth = 20
  1. Проверьте права на путь и сообщения основного журнала PHP-FPMЧерез SSH посмотрите путь каталога slowlog и свободное место командой df -h; затем ls -ld /var/log/php-fpm — только если именно эта директория задана. Откройте журнал службы за время включения slowlog и ищите невозможность открыть файл. Если файла нет, не выдавайте ему 777; настройте каталог по политике системы и создавайте журнал штатными средствами с правами администратора.
  2. Пример только для просмотра на Linux
    Linux · Терминал (Bash)Команда
    Пример только для просмотра на Linux. Если в вашем конфиге указан иной каталог, замените /var/log/php-fpm на него.
    df -h
    ls -ld /var/log/php-fpm
  1. Протестируйте конфигурацию до примененияПосле сохранения копии пула и изменения порога выполните sudo php-fpm8.2 -t для Debian с PHP 8.2. Дождитесь подтверждения успешной проверки и лишь затем sudo systemctl reload php8.2-fpm. Если тест ругается на slowlog, восстановите прежний путь или исправьте разрешения и повторите. Для нестандартного PHP из панели используйте её бинарник и службу, не затрагивайте другие версии.
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Пример. Вторая команда выполняется только после успешного теста; версия и служба заменяются по фактической установке. Команда перезагрузки выполняется только при успешной проверке конфигурации (оператор &&). При ошибке исправьте конфигурацию и повторите проверку; не запускайте перезагрузку вручную.
    sudo php-fpm8.2 -t && sudo systemctl reload php8.2-fpm

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

  1. Воспроизведите медленное выполнение и проверьте журналЗапустите именно PHP-операцию, обычно занимающую больше установленного порога: тяжёлый отчёт в тестовой среде на небольшом объёме данных. Откройте slowlog через панель или ограниченный просмотр в SSH. Ожидайте метку времени и стек вызовов PHP; он показывает место выполнения, но не всегда корень медленного SQL или внешнего API. Если лог пуст, сравните реальную длительность процесса и значение request_slowlog_timeout активного пула.
  1. Отделите задержку ожидания в очереди от задержки кодаЕсли slowlog по-прежнему пуст, но журнал Nginx показывает большое request_time, проверьте listen queue в защищённом статусе FPM. Рост очереди означает, что запрос ждёт свободного работника до выполнения PHP-кода. Сравните upstream_response_time и время подключения к FPM, если поля включены в журналы. Не лечите очередь уменьшением порога slowlog: ищите занятые процессы, медленные SQL и предел pm.max_children.
  1. Завершите диагностику и верните рабочий порогКогда найден медленный участок, исправляйте SQL-запрос или сетевой таймаут приложения, затем повторите сценарий при обычной нагрузке. Изменённый диагностический порог 5s может быть слишком подробным: восстановите прежний request_slowlog_timeout либо согласованное рабочее значение и повторно протестируйте конфигурацию. Не оставляйте открытым доступ к журналу: в стеках встречаются внутренние пути и данные приложения.

#Как проверить результат и что предпринять при неуспехе

Успех диагностики — воспроизводимое выполнение PHP дольше порога появляется в slowlog, а долгие ответы без такой записи отделены как ожидание очереди или внешних ресурсов. После устранения медленного участка время ответа сокращается; при повторении ошибки запишите статус пула и время запроса, не разглашая стек вызовов публично.

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

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

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