PHP на сервере Linux, PHP-FPM (версия уточняется)

PHP на сервере: Скрипт завершается по max_execution_time при длинном запросе

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

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

PHP может прервать долгую обработку, когда выполнение скрипта достигает max_execution_time. Однако для веб-запросов существуют отдельные ограничения PHP-FPM, Nginx/Apache и сети. Поэтому увеличение max_execution_time не всегда исправляет HTTP 504: важно найти, какой именно механизм завершает запрос.

В этой статье
  1. Что происходит и когда применима инструкция
  2. Причины и диагностические признаки
  3. Подробная пошаговая инструкция
  4. Как проверить, что проблема исправлена
  5. Если не помогло — дальнейшая диагностика и откат

#Что происходит и когда применима инструкция

PHP может прервать долгую обработку, когда выполнение скрипта достигает max_execution_time. Однако для веб-запросов существуют отдельные ограничения PHP-FPM, Nginx/Apache и сети. Поэтому увеличение max_execution_time не всегда исправляет HTTP 504: важно найти, какой именно механизм завершает запрос.

#Причины и диагностические признаки

Возможная причинаКак узнатьЧто делать
Срабатывает лимит времени PHPСрабатывает лимит времени PHP. В журнале Maximum execution time of … seconds exceeded.В журнале Maximum execution time of … seconds exceeded.Сократить обработку и при необходимости обоснованно изменить лимит.
Процесс принудительно завершает PHP-FPMПроцесс принудительно завершает PHP-FPM. В FPM журнале указано request_terminate_timeout и завершение worker.В FPM журнале указано request_terminate_timeout и завершение worker.Учитывать лимит пула отдельно.
Ответ обрывает обратный проксиОтвет обрывает обратный прокси. В браузере 504/502, в PHP может продолжаться работа или не быть записи max_execution_time.В браузере 504/502, в PHP может продолжаться работа или не быть записи max_execution_time.Проверить журнал прокси и соответствующий timeout.

#Подробная пошаговая инструкция

  1. Зафиксируйте полный текст и времяОткройте журнал ошибок PHP и обратного прокси за время сбоя. Если PHP пишет Maximum execution time exceeded, запишите файл и строку; если браузер показывает 504, ищите соответствующую строку Nginx/Apache. Не меняйте тайм-ауты до определения первого ограничителя.
  1. Сравните время выполнения на маленьком и большом набореВ тестовой среде воспроизведите обработку 10 и 100 записей, замерьте длительность и рост памяти. Если объём растёт линейно, разбейте операцию на небольшие части; если время резко увеличивается, ищите тяжёлый запрос БД или блокировку.
  2. SSH, только значение CLI, которое может отличаться от FPM
    Linux · Терминал (Bash)Команда
    SSH, только значение CLI, которое может отличаться от FPM. Для сайта проверяйте ini_get в защищённом веб-контексте.
    php -r "echo ini_get("max_execution_time"), PHP_EOL;"
  1. Проверьте ограничения веб-контекстаНайдите max_execution_time через настройки сайта, request_terminate_timeout в pool.d и тайм-аут ожидания FastCGI в веб-сервере. На Linux время системных вызовов и ожидания внешних операций может не входить в max_execution_time так же, как собственное выполнение PHP; это зависит от платформы.
  2. SSH, администратор, только поиск ограничений в пулах Debian/Ubuntu
    Linux · Терминал (Bash)КомандаНужен sudo
    SSH, администратор, только поиск ограничений в пулах Debian/Ubuntu. При иной сборке проверьте путь.
    sudo grep -R -nE "^\s*(request_terminate_timeout|php_admin_value\[max_execution_time\])" /etc/php/*/fpm/pool.d/*.conf
  1. Сначала устраните дорогую операциюДля многотысячных записей используйте обработку порциями или очередь заданий; уменьшите объём выборки, добавьте индексы после проверки плана SQL, установите разумные тайм-ауты для обращений к API. Не запускайте тяжёлую задачу при каждом открытии страницы.
  1. Если синхронный запрос неизбежен, согласуйте границыНа ограниченном примере выберите max_execution_time с запасом, оцените ресурсы и согласуйте с тайм-аутами прокси и FPM. Не ставьте бесконечное время всем веб-запросам. Для фоновой задачи лучше отдельный CLI-исполнитель с контролем очереди и повторов.
  1. Измените настройку в правильном местеСохраните конфигурацию нужного пула, настройте лимит через панель или ini FPM, выполните тест и примените только выбранную службу. Повторите один безопасный запрос в тестовом окружении, затем на работающем сервере.
  2. SSH с административными правами, пример Debian + PHP 8.2
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    SSH с административными правами, пример Debian + PHP 8.2. Проверка перед применением; reload может влиять на активные запросы.
    sudo php-fpm8.2 -t && sudo systemctl reload php8.2-fpm

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

  1. Проверьте, что не появилось новых проблемСравните время ответа, RAM, количество активных обработчиков и очередь FPM. Если длинные запросы начали занимать все процессы, верните ограничение и вынесите операцию в фоновую обработку.

#Как проверить, что проблема исправлена

Задача завершается штатно без сообщения max_execution_time, HTTP-ответ получен в разумный срок и нет накопления занятых работников.

#Если не помогло — дальнейшая диагностика и откат

Если вместо ошибки PHP остаётся 504, читайте журнал прокси и время ответа приложения. Не увеличивайте тайм-ауты одновременно на всех уровнях без измерений.

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

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

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