Самое просто решение (если код рабочий)
Увеличить время ответа сервера, время выполнения скрипта |
1. ngix повысить время ожидания веб-сервера 3500 секунд поставить
Подключитесь через ssh
Откройте конфигурационный файл
sudo nano /etc/nginx/nginx.conf |
http{ #... proxy_read_timeout 300; proxy_connect_timeout 300; proxy_send_timeout 300; #... } |
server { #... proxy_connect_timeout 3500; proxy_send_timeout 3500; proxy_read_timeout 3500; send_timeout 600; #... } |
в новом поколении
systemctl reload nginx |
service nginx reload |
2 Установить php max_execution_time 3500
или .htaccess (лучше для проверки)
php_value max_execution_time 3500, |
@ini_set("max_execution_time", 3500); |
или .htaccess (лучше проверки)
php_value session.gc_maxlifetime 3500, |
@ini_set("session.gc_maxlifetime", 3500); |
@set_time_limit(3500); |
Как проверить
Вывести параметры
echo ini_get('max_execution_time'); echo ", "; echo ini_get('session.gc_maxlifetime'); |
sleep(3470); //немного меньше, чем вам надо echo "hello world"; |
можно в командной строке https://ваш_сайт/bitrix/admin/php_command_line.php?lang=ru
можно в тестовом скрипте
но тогда, если параметры выставили в /bitrix/php_interface/dbconn.php
подключите предварительно пролог
require_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/include/prolog_before.php"); |
Искать причину в коде и править код
Причина 1
Куча кастомных обработчиков событий, или мало но очень тяжелые (долго исполняются), или много запросов к базе можно оптимизировать
Смотреть в init.php, в модулях
Решение: переделать обработчики, убрать обработчики, оптимизировать запросы к базе
Причина 2
Большая структура разделов, она выполняется за 1 шаг, если количество товаров-свойств в пакете можно уменьшить, то структура создается за 1 шаг.
Решение: только увеличить время ответа сервера, время выполнения срипта (см. выше)
Причина 3
при загрузке файла с ценами prices_***.xml
в компоненте bitrix/catalog.import.1с/component.php
на 7 шаге ($NS["STEP"] == 7)
вызывается метод
$result = $obCatalog->ImportElements($start_time, $arParams["INTERVAL"]); |
метод обновляет фасетный индекс инфоблока, запускается без учета по времени выполнения срипта
Iblock\PropertyIndex\Manager::runDeferredIndexing($this->next_step["IBLOCK_ID"]); |
метод runDeferredIndexing описан тут /bitrix/modules/iblock/lib/propertyindex/manager.php
цикл
foreach (self::$elementQueue[$productIblock] as $elementId) self::elementIndexing($indexer, $elementId); //тут долго выполняется |
Решение 2. закомментировать данную строку
self::elementIndexing($indexer, $elementId); |