Расход оперативной памяти у интернет-магазина битрикс с 60 000 товаров
Исходные данные хостинг: тариф VDS-KVM-NVMe-Битрикс-Турбо, 3 ядра процессора, 6 Гб оперативной памяти, 60 Гб диска.
Исходные данные сайт: Версия PHP 7.4.29, Редакция продукта: Бизнес, Решение intec.universe, 27556 - предложений, 19938 - товаров, 80 категорий
После выполнения мной доработки не связанной с обменом, у заказчика появилась проблема с обновлением товаров из раздела КПБ после обмена с 1С.
Перестали выгружаться фото для торговых предложений, соответственно в каталоге созданный товар из данного предложения - деактивируется.
Заказчик предположил, что есть какой то конфликт между 2 скриптами, один из которых моей разработки.
Я же прекрасно понимал, пересечения явно нет, так как я делал обработчик, который никак не мог повлиять на итоги обмена.
Возник вопрос в чем тогда может быть причина сбоя? Трикотаж обновляется, а кпб выгружаются, но деактивируются и без фото. Даже после запуска "Принудительной выгрузки фото"
Я предположил, что возможно не хватает опять ресурсов сервера, так как загрузка оперативки была 70%. Добавили еще +2 ГБ ОЗУ (было изначально 4Гб, потом я рекомендовал поднять до 6Гб)
Проблемы уже были ранее, поэтому вначале моей диагностики было выявлено, что 80% памяти занято до обмена и работы скриптов. Как видно 3Гб памяти нехватает для битрикс 60 000 товаров
Решил, что нужно смотреть в момент обмена что по памяти происходит. Так как после увеличения памяти ситуация была такой, 75% памяти занято и я предполагал, что во время обмена остатков памяти не хватает.
Запустили с принудительной выгрузкой фото, понаблюдаем вот такая ошибка при старте появляется.
discountCard___56f2630a-95af-4c24-9f65-a62ec1e25024.xml: Произошла ошибка на стороне сервера. Получен неизвестный статус импорта.
Ответ сервера: MySQL Query Error!
С чем может быть связана проблема?
Это ошибка базы данных сервера.
В итоге по загрузке RAM, получилось, что основная часть уходит на поддержку основных служб:
3751MB mysqld
2346MB httpd
141MB nginx"
Итого более 6Гб RAM
Судя по данным сейчас память больше 6гб, что на данный момент больше чем было при 4Гб и 6Гб, это вполне могло привести к нарушениям в работе базы данных
Это нормально, что основные ресурсы потребляют такой объем?
Это нормально при таких объёмах каталога и обмене большого количества данных, плюс неизвестно сколько потребляют кастомные скрипты.
Битрикс становится очень прожорливый когда начинает больше 30 000 товаров
Ещё статьи:
21.12.2022
Пример обновление коэффициентов MeasureRatio
$eventManager->addEventHandler("catalog", "\Bitrix\Catalog\MeasureRatio::OnBeforeUpdate", function (\Bitrix\Main\Event $event)
ID: 424
21.12.2022
Пример события OnSaleOrderSaved
$eventManager->addEventHandler("sale", "OnSaleOrderSaved", ['OrderEvents', 'OrderServicesCollection']);
ID: 423
12.12.2022
Корзина пользователя в init.php
Формируем корзину текущего пользователя
$query = CSaleBasket::GetList(array(), array("FUSER_ID" => CSaleBasket::GetBasketUserID(), "LID" => SITE_ID, "ORDER_ID" => "NULL"));
Получаем данные по товарам
$dbElement = CIBlockElement::GetList( Array(), Array('ID'=>$arPRODUCT_ID), false, false, array('ID','IBLOCK_ID','PROPERTY_IMAGES') );
ID: 422