Доработки

Ускорение тормозящего интернет-магазина на Битрикс

Крупный магазин на Битрикс тормозил: корзина открывалась 6,5–13,5 секунды, swap упирался в 99%. Через слой local-override без правок ядра ускорили корзину почти в 34 раза и сняли нагрузку с сервера.

Клиент Крупный интернет-магазин, РБ
Отрасль E-commerce · розница
Срок 2 недели
Тип Оптимизация производительности
6,5 c → 0,19 c время открытия корзины
1888 страниц без тяжёлых JOIN (76%)
99% → ~0 использование swap после тюнинга

Задача

Крупный интернет-магазин на Битрикс заметно тормозил. Страница корзины открывалась 6,5–13,5 секунды, разделы каталога вешали тяжёлые SQL-запросы, оперативной памяти сервера не хватало — использование swap скакало почти до 100%, и мониторинг регулярно алёртил. Всё это на живом магазине с постоянным трафиком, где нельзя было позволить себе простой и нельзя было трогать ядро Битрикса.

Что было

  • Корзина открывалась до 13 секунд: почти всё время «съедал» один компонент, который на странице корзины пересчитывал лишние данные заказа.
  • Страницы разделов каждый раз выполняли по два тяжёлых JOIN ради цен, которые уже были посчитаны фоновым агентом, но никем не читались.
  • Память сервера была на пределе: использование swap доходило до 99%, что тормозило вообще всё.
  • Фоновые агенты Битрикса работали в «хитовом» режиме — нагружали каждый пользовательский запрос.

Что сделали

  • Все правки — через слой local-override, без единой модификации ядра: обновления Битрикса переживаются без потери доработок.
  • На странице корзины отключили расчёт данных, которые там не нужны (службы доставки и платёжки считаются на шаге оформления) — тяжёлый вызов ушёл.
  • Цены разделов стали читаться из уже посчитанных полей вместо двух JOIN на каждый показ страницы.
  • Перевели фоновые агенты Битрикса со «хитового» режима на штатный cron — нагрузка ушла со страниц пользователей.
  • Донастроили Apache и MySQL через override-слои, чтобы память сервера перестала уходить в swap.

Что получилось

  • Открытие корзины ускорилось с 6,5 секунды до 0,19 секунды внутри компонента — почти в 34 раза.
  • 1888 страниц разделов (76% каталога) перестали выполнять тяжёлые JOIN на каждый показ.
  • Использование swap упало с 99% практически до нуля — сервер перестал упираться в память.
  • Всё это без простоя магазина и без правок ядра — доработки живут в отдельном слое.

Имя клиента не раскрывается по NDA. Реальные имена и подробности обсуждаем в брифе.

Похожая задача?

Опишите кратко — за 1–2 дня вернёмся с разбором и оценкой по часам. Если решение тиражное — честно скажем.

✈ Telegram