Бесплатный экспресс-аудит сайта Безопасность, SEO, AI-поиск и 152-ФЗ — отчёт с баллами за минуту Проверить сайт
Обсудить проект

Maximum execution time exceeded: скрипт не уложился во время

Текст ошибки:

Fatal error: Maximum execution time of 30 seconds exceeded

Где меняется лимит

  • Сайт — параметр max_execution_time в php.ini действующей версии PHP или в настройках пула PHP-FPM. Требование вендора — 300.
  • Задания cron — отдельный php.ini консольного PHP. В консоли лимит обычно не ограничен, но свои настройки там тоже есть.
  • Веб-сервер — таймауты ожидания ответа от PHP. Если они меньше, чем лимит PHP, обрывать будет веб-сервер, и ошибка будет другой: 502 или 504.

Когда увеличивать лимит правильно

Разовые тяжёлые операции: обновление продукта, переиндексация поиска, конвертация изображений, первая загрузка каталога. На время работы лимит поднимают, потом возвращают.

Когда дело не во времени

Если в лимит не укладывается обычная страница, увеличение времени только растянет ожидание для посетителя. Смотреть нужно, что именно долго:

  1. Включите панель производительности и посмотрите время генерации и число запросов к базе на проблемной странице.
  2. Сотни запросов на одну страницу — признак выборки в цикле: данные запрашиваются по одному элементу вместо одного запроса на все.
  3. Проверьте кеширование компонентов: отключённый кеш на главной или в каталоге даёт ровно такую картину.
  4. Посмотрите, нет ли обращений к внешним сервисам прямо при отрисовке страницы: чужой медленный ответ останавливает вашу страницу.

Подробный порядок разбора медленного сайта — в инструкции про то, что делать, если сайт на Битриксе тормозит.

Долгие операции по-хорошему

Операции, которые по природе долгие — выгрузки, обмены, массовые пересчёты — переводят на пошаговое выполнение: каждая порция укладывается в лимит, состояние сохраняется между шагами. Тогда операция не зависит от лимита времени вовсе и переживает обрыв связи.

Частые вопросы

Поставил max_execution_time 0, а операция всё равно обрывается.

Значит обрывает не PHP, а веб-сервер: у nginx свои таймауты ожидания ответа, и они короче. Ошибка тогда выглядит как 504 Gateway Timeout.

Почему обмен с 1С падает, а сайт работает?

Обмен — самая долгая операция на сайте, он первым упирается в любой лимит времени. Правильное лечение — не бесконечное время, а дробление обмена на порции.

Какое значение требует вендор?

max_execution_time = 300 секунд. Этого хватает для штатных операций, включая обновление продукта.