Оптимизация утечек памяти на образовательной платформе интегратора в сфере информационной безопасности
Команда разработчиков SimbirSoft приняла участие в решении сложной технической задачи. В ходе исследования было зафиксировано аномальное потребление памяти при использовании браузерной кнопки «Назад». Проблема не диагностировалась стандартными методами и была признана нерешаемой. Несмотря на низкую вероятность возникновения в пользовательских сценариях, задача была передана нам для поиска принципиально иного подхода к устранению утечки.
Цели проекта
-
Стабильность интерфейса: критическое потребление памяти (до 300 МБ за шаг) приводило к падениям браузера и делало продукт неработоспособным.
-
Лояльность пользователей: при возникновении сценария сервис полностью «падал», что грозило негативом, жалобами и оттоком.
-
Эффективность разработки: для решения задачи привлекли внешних специалистов из-за нехватки внутренних ресурсов.
-
Снижение рисков: утечка могла спровоцировать другие скрытые проблемы и увеличить технический долг.
Задачи разработки
-
Диагностировать критическую утечку памяти.
-
Локализовать проблему: найти компоненты, которые не очищали ресурсы.
-
Устранить утечку.
-
Обеспечить воспроизводимость: создать стабильные условия для проверки гипотез и исправлений.
Решение
В query-строку (строку запроса) добавили уникальные параметры, не влияющие на логику приложения. Браузер перестал считать страницы идентичными и не удерживал их в кеше. Это позволило механизму для управления памятью штатно освобождать память через 20–30 секунд.
Результат
-
Устранена утечка памяти. Потребление RAM при навигации кнопкой «Назад» вернулось к штатным значениям.
-
Восстановлена стабильность интерфейса. Браузер перестал тормозить и падать — обеспечена бесперебойная работа пользователей.
-
Сняты ограничения сценария.Интерфейс работает корректно при любых действиях пользователя.
-
Снижен технический долг. Устранена скрытая угроза стабильности, повышена надежность кодовой базы.
Бизнес-эффект
Уменьшилось количество жалоб на зависания и некорректную работу кнопки «Назад». Ресурсы техподдержки высвободились для других задач.
Закрыта задача, которая потребляла ресурсы команды. Разработчики вернулись к созданию нового функционала.
Устранена проблема, которая могла привести к каскадным сбоям при росте нагрузки. Бизнес защищен от будущих инцидентов.