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.
Когда увеличивать лимит правильно
Разовые тяжёлые операции: обновление продукта, переиндексация поиска, конвертация изображений, первая загрузка каталога. На время работы лимит поднимают, потом возвращают.
Когда дело не во времени
Если в лимит не укладывается обычная страница, увеличение времени только растянет ожидание для посетителя. Смотреть нужно, что именно долго:
- Включите панель производительности и посмотрите время генерации и число запросов к базе на проблемной странице.
- Сотни запросов на одну страницу — признак выборки в цикле: данные запрашиваются по одному элементу вместо одного запроса на все.
- Проверьте кеширование компонентов: отключённый кеш на главной или в каталоге даёт ровно такую картину.
- Посмотрите, нет ли обращений к внешним сервисам прямо при отрисовке страницы: чужой медленный ответ останавливает вашу страницу.
Подробный порядок разбора медленного сайта — в инструкции про то, что делать, если сайт на Битриксе тормозит.
Долгие операции по-хорошему
Операции, которые по природе долгие — выгрузки, обмены, массовые пересчёты — переводят на пошаговое выполнение: каждая порция укладывается в лимит, состояние сохраняется между шагами. Тогда операция не зависит от лимита времени вовсе и переживает обрыв связи.
Частые вопросы
Поставил max_execution_time 0, а операция всё равно обрывается.
Значит обрывает не PHP, а веб-сервер: у nginx свои таймауты ожидания ответа, и они короче. Ошибка тогда выглядит как 504 Gateway Timeout.
Почему обмен с 1С падает, а сайт работает?
Обмен — самая долгая операция на сайте, он первым упирается в любой лимит времени. Правильное лечение — не бесконечное время, а дробление обмена на порции.
Какое значение требует вендор?
max_execution_time = 300 секунд. Этого хватает для штатных операций, включая обновление продукта.