#Что означает сообщение
Скрипты обрываются
PHP-FPM slowlog показывает стек выполнения медленного запроса, а request_terminate_timeout ограничивает время работы обработчика. Увеличение лимита не устраняет тяжёлый SQL-запрос.
#Как отличить причины
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Медленный скрипт | В slowlog проверьте стек PHP для конкретного зависшего URI и временную метку события.. Важно сопоставить проверку с исходным симптомом, а не с догадкой. | Оптимизируйте медленный участок скрипта или запроса к базе, не скрывая проблему бесконечным таймаутом.. Для проверки результата повторите только прежнее действие. |
| Таймаут | В PHP-FPM сравните request_terminate_timeout, время slowlog и продолжительность обработки одного запроса.. Учитывайте версию PHP-FPM и условия сбоя. | Найдите причину медленного PHP/SQL и только после этого подберите обоснованный таймаут пула.. Изменения вносите по одному, с возможностью возврата. |
| База | При диагностике «PHP-FPM: slow log и request_terminate_timeout» уточните, какой файл, каталог или запись вызывает отказ, и сравните время её изменения с началом ошибки. Учитывайте версию PHP-FPM и условия сбоя. | Для случая «PHP-FPM: slow log и request_terminate_timeout» исправляйте целевой файл или запись и оставляйте исходник на случай отката. Для проверки результата повторите только прежнее действие. |
| Внешний API | Сравните момент появления признака «Внешний API» с тем, когда ранее работала нужная функция. Учитывайте версию PHP-FPM и условия сбоя. | Исправляйте только подтверждённый фактор «Внешний API», сохраняя прежние настройки. Изменения вносите по одному, с возможностью возврата. |
#Пошаговое решение
- Зафиксируйте ошибку и проверьте условияПри жалобе на таймаут откройте журнал пула PHP-FPM и найдите точное сообщение и длительность выполнения. Сравните его с кодом ответа Nginx/Apache и временем в браузере:
request_slowlog_timeoutлишь записывает трассировку, аrequest_terminate_timeoutможет завершить выполняющийся запрос. - Выполните основную проверку и исправлениеПроверьте обе директивы для нужного пула, а также
max_execution_timeдействующего веб-PHP. Если в slowlog виден зависший запрос к БД или внешнему сервису, устраняйте блокировку/сетевой таймаут в приложении прежде, чем увеличивать ограничения. - Исключите другие подтверждённые причиныПри необходимости временно включите журнал медленных вызовов с разумным порогом и защищённым местом хранения. Не ставьте
request_terminate_timeout = 0без анализа: зависший процесс тогда может бесконечно занимать рабочий слот. Внешние загрузки и большие задания предпочтительно выносить из HTTP-запроса. - Проверьте, действительно ли проблема решенаСохраните копию настроек, проверьте синтаксис вашей версии PHP-FPM и согласованно примените изменение к нужному пулу. Повторите проблемную операцию и проверьте, исчезла ли причина замедления, а не только сообщение в журнале; сравните число занятых процессов и ошибки 502/504.
#Что важно перед исправлением
Не включайте подробный slowlog с чувствительными данными в публичный каталог и не задавайте безграничный таймаут. В рабочей системе отслеживайте нагрузку и число занятых процессов.