Дано: сайт одежды, в интересующем нас разделе порядка 370 товаров (пальто), там где товаров поменьше такой проблемы не возникает. Для SEO и в общем то для удобства посетителей создали такую схему: делаем какую то выборку по товарам (например пальто с материалом "кожа";), загоняем с помощью модуля редиректов в короткий урл /palto_kozha/, с помощью платного компонента ipol.aseo прописываем новому адресу уникальный текст, тайтл, меты.
Скриншот списка параметров приложен, примерно можно судить о его насыщенности. Всего порядка 35 свойств (участвуют не все). В поле "дизайн" (множественный выбор, вид "список";) порядка 30 пунктов.
Итого притом что страница пальто открывается, если в умном фильтре выбрать какой то компонент, например пальто дизайном "пончо" (таких штук девять в каталоге), то отправляется запрос аяксом и файрбаг показывает что там случилась 500 ошибка, в эррор.лог пишется чтото в таком духе
Цитата
mod_fcgid: stderr: PHP Fatal error: Allowed memory size of 419430400 bytes exhausted (tried to allocate 262144 bytes) in .../httpdocs/bitrix/components/vera/catalog.smart.filter.new/component.php on line 247
Да, вы наверное офигели, но тут даже выделенных 400 мегабайт на страницу не хватает. Самый дешевый выделенный сервер на хецнере, 4 гига памяти, пока что только пара проектов на поддержке, включая этот. Повышать memory_limit дальше я не вижу смысла, добавят еще пару пунктов в свойства и оно попросит гигабайт, надо решать проблему системно.
Строчка из кода (на самом деле не всегда тут бывает ошибка, но чаще именно здесь)
Код
if ($_CHECK){
/*Disable composite mode when filter checked*/
$this->setFrameMode(false);
//$sstime = microtime(true);
$index = array();
foreach ($arResult["COMBO"] as $id => $combination)
{
foreach ($combination as $PID => $value)
{
$index[$PID][$value][] = &$arResult["COMBO"][$id]; //247 строчка
}
}
/*Handle disabled for checkboxes (TODO: handle number type)*/
foreach ($arResult["ITEMS"] as $PID => &$arItem)
волшебное слово vera говорит о том, что Битрикс не несет ответсвенности за данный компонент попробуйте для начала установить типовой компонент от Битрикс
Цитата
Люди добрые, подскажите, можно ли тут чтото исправить и как побороть эту прожорливую гидру.
для начала - типовой компонент
если не поможет - к разработчикам вашего сайта или в ТП Битрикс
дизайн под такой вариант не настроен, так что сразу было видно, что все по другому
и таки ошибка вылезла снова
Цитата
[client 95.78.66.40] mod_fcgid: stderr: PHP Fatal error: Allowed memory size of 419430400 bytes exhausted (tried to allocate 71 bytes) in /var/www/vhosts/butik-vera.ru/httpdocs/bitrix/components/bitrix/catalog.smart.filter/component.php on line 231
общей емкостью 46 Мб 77к это я там понимаю 30вариантовдизайна*4вариантасезона*3 флага наличия*3 варианта длины*25 вариантовцвета*11вариантовразмера*2вариантаскидки*2вариантаналичиякапюшона*2 вариантаналичияпринта*8вариантовматериала*3вариантастраны*3 вариантапроизводителя ну или упрощенный вариант этого всего, ибо если все это перемножить то получится 170млн комбинаций
Может кто искать будет, решение для 15+ версии это запустить фасетный индекс для инфоблока с которым работает фильтр (в этом же файле если фасетный индекс актуален, то "тяжелый" код выполняться не будет)
Для тех кто хочет мучаться, можете начинать с рекурсивной функции ArrayMultiply (в файле /components/bitrix/catalog.smart.filter/class.php) И /components/bitrix/catalog.smart.filter/component.php::213-241 там где она вызывается.