+7 495 008 8452
  • Загрузка
Выберите ваш цвет

Решение проблемы в выгрузке при ошибке в логах PHP Fatal error: Allowed memory size of … bytes exhausted

При использовании нашего модуля экспорта и при наличии большого числа скидок в вашем каталоге и при большом размере каталога может возникнуть ошибка нехватки памяти:

Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 147456 bytes) in /home/bitrix/www/bitrix/modules/catalog/general/discount.php on line 3334

Первое, что нужно попробовать для решения этой ошибки – это поднять директиву php memory_limit до 1-2гб и удалить не-активные и не-нужные скидки интернет-магазина.

У скидок в битриксе такое правило - чем их меньше, тем быстрее идет обсчет цен.

Если первое не помогло, пробуем второе: проблема может заключаться в том, что после каждого использования метода получения цены товара через \CCatalogProduct::GetOptimalPrice($intProductId, …) – в статичном кеше битрикса сохраняется обсчет скидок переданного товара, т.е. память растет при выборе каждого следующего товара и сохраняется в статичном массиве-кеше CAllCatalogDiscount::$arCacheProduct.

Как решение для модуля каталога (версия модуля catalog 20.100.200) можно добавить подобное событие в init.php для очистки этого по-товарного кеша расчетов скидок
(решение действует для автоматических выгрузок):

// drop unused cache to per-product discount on cli run
\Bitrix\Main\EventManager::getInstance()->addEventHandler('catalog', 'OnGetDiscountResult', static function (&$arResult) {

      if (PHP_SAPI == 'cli') {
            $property = new \ReflectionProperty("CAllCatalogDiscount", "arCacheProduct");
            $property->setAccessible(true);
            $property->setValue("CAllCatalogDiscount", []);
      }
      return true;

});

Если у Вас осталась данная проблема - обратитесь в нашу техническую поддержку, мы выясним и подскажем как устранить данную ошибку.

Возврат к списку