При использовании нашего модуля экспорта и при наличии большого числа скидок в вашем каталоге и при большом размере каталога может возникнуть ошибка нехватки памяти:
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;
});
Если у Вас осталась данная проблема - обратитесь в нашу техническую поддержку, мы выясним и подскажем как устранить данную ошибку.Возврат к списку