#Симптомы и отличие от похожих неисправностей
Веб-страницы иногда открываются по минуте, однако журнал медленных 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 и файл с владельцем. |
#Диагностика и пошаговое устранение
- Зафиксируйте один медленный URL и времяВ браузере повторите конкретное действие на тестовом аккаунте: например, откройте отчёт или карточку. Запишите адрес без параметров доступа, время и длительность. В журнале доступа Nginx/Apache найдите эту строку по минуте и коду. Если HTML быстро отдан, но вкладка долго загружает сторонние изображения, slowlog PHP не поможет: сначала изучайте загрузку ресурсов в инструментах разработчика браузера.
- Проверьте, что запрос действительно исполнялся в нужном PHP-FPMВ конфигурации домена найдите
fastcgi_pass, затем в пуле PHP-FPM — директивуlisten. Проверьте конкретную версию в панели. Еслиfastcgi_passведёт на другую службу или даже на Apache с обработчикомmod_php, включение slowlog в текущем пуле никак не отразится на запросах. Запишите старые значения и путь активного пула перед изменениями.
- Уточните значения всех трёх параметров записиОткройте файл пула в панели или редакторе администратора: найдите
slowlog,request_slowlog_timeout,request_slowlog_trace_depth. Для диагностики порог можно временно поставить 5s, если запросы воспроизводимо занимают 15–20 секунд; значение 0 выключает запись. Учитывайте, что слишком низкий порог на оживлённом сервере создаст много записей и может заполнить диск. Запишите прежние значения для отката. - Пример только для диагностикиINIПример только для диагностики. Каталог журнала должен существовать, иметь надлежащие права, а путь — соответствовать выбранному пулу.
slowlog = /var/log/php-fpm/example-slow.log request_slowlog_timeout = 5s request_slowlog_trace_depth = 20
- Проверьте права на путь и сообщения основного журнала PHP-FPMЧерез SSH посмотрите путь каталога slowlog и свободное место командой
df -h; затемls -ld /var/log/php-fpm— только если именно эта директория задана. Откройте журнал службы за время включения slowlog и ищите невозможность открыть файл. Если файла нет, не выдавайте ему 777; настройте каталог по политике системы и создавайте журнал штатными средствами с правами администратора. - Пример только для просмотра на LinuxLinux · Терминал (Bash)КомандаПример только для просмотра на Linux. Если в вашем конфиге указан иной каталог, замените
/var/log/php-fpmна него.df -hls -ld /var/log/php-fpm
- Протестируйте конфигурацию до примененияПосле сохранения копии пула и изменения порога выполните
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Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- Воспроизведите медленное выполнение и проверьте журналЗапустите именно PHP-операцию, обычно занимающую больше установленного порога: тяжёлый отчёт в тестовой среде на небольшом объёме данных. Откройте slowlog через панель или ограниченный просмотр в SSH. Ожидайте метку времени и стек вызовов PHP; он показывает место выполнения, но не всегда корень медленного SQL или внешнего API. Если лог пуст, сравните реальную длительность процесса и значение request_slowlog_timeout активного пула.
- Отделите задержку ожидания в очереди от задержки кодаЕсли slowlog по-прежнему пуст, но журнал Nginx показывает большое
request_time, проверьтеlisten queueв защищённом статусе FPM. Рост очереди означает, что запрос ждёт свободного работника до выполнения PHP-кода. Сравнитеupstream_response_timeи время подключения к FPM, если поля включены в журналы. Не лечите очередь уменьшением порога slowlog: ищите занятые процессы, медленные SQL и предел pm.max_children.
- Завершите диагностику и верните рабочий порогКогда найден медленный участок, исправляйте SQL-запрос или сетевой таймаут приложения, затем повторите сценарий при обычной нагрузке. Изменённый диагностический порог 5s может быть слишком подробным: восстановите прежний
request_slowlog_timeoutлибо согласованное рабочее значение и повторно протестируйте конфигурацию. Не оставляйте открытым доступ к журналу: в стеках встречаются внутренние пути и данные приложения.
#Как проверить результат и что предпринять при неуспехе
Успех диагностики — воспроизводимое выполнение PHP дольше порога появляется в slowlog, а долгие ответы без такой записи отделены как ожидание очереди или внешних ресурсов. После устранения медленного участка время ответа сокращается; при повторении ошибки запишите статус пула и время запроса, не разглашая стек вызовов публично.