> Как выявлять и исправлять утечки памяти (JavaScript)
Уровень: senior · Роль: frontend · Язык: JavaScript · Категория: Технические вопросы
Компании: ЭНИРАН
Стек: Node.js, JavaScript
> Пример ответа
Утечки памяти в Node.js чаще всего возникают из-за глобальных переменных, забытых таймеров, неочищенных слушателей событий или замыканий, удерживающих ссылки на большие объекты. Для выявления я использую комбинацию инструментов:
-
Встроенный профайлер Node.js - запускаю приложение с флагом
--inspect, затем в Chrome DevTools (вкладка Memory) делаю снимки кучи (Heap Snapshots) до и после выполнения подозрительного сценария. Сравниваю, какие объекты не освобождаются. -
clinic.js - утилита
clinic doctorавтоматически анализирует утечки, показывая графики памяти и события GC. -
heapdump - модуль для создания дампов памяти в production-режиме без остановки процесса.
Исправляю так:
-
Слушатели событий: всегда удаляю через
removeListenerили используюonceдля одноразовых событий. В React-фронтенде - отписываюсь вuseEffectcleanup. -
Таймеры: сохраняю идентификаторы
setInterval/setTimeoutи очищаю их при завершении работы компонента или модуля. -
Замыкания: избегаю хранения больших данных в замыканиях, которые живут дольше, чем нужно. Использую слабые ссылки (
WeakMap,WeakSet) для кэшей. -
Глобальные переменные: минимизирую их использование, а если нужны - явно обнуляю (
global.cache = null).
Пример кода для отладки:
JAVASCRIPTconst heapdump = require('heapdump');setInterval(() => {global.gc(); // принудительный GC (нужен флаг --expose-gc)heapdump.writeSnapshot(`/tmp/heap-${Date.now()}.heapsnapshot`);}, 60000);
После исправления проверяю, что размер кучи стабилизируется и не растёт бесконечно при длительной работе.
> Похожие задачи по JavaScript
Как Node.js работает с файловой системой и какие библиотеки используются
Доводилось ли работать с многопоточностью в Node.js
Как решать проблему нагрузки на CPU в сервисе
Что такое GridFS в MongoDB
> Похожие задачи по frontend
Как хранятся коллекции по иерархии - как объекты или ссылки
Как проходят этапы разработки: спринты, дели, ретроспективы
Расскажите про предметную область и проекты компании
Как проходит онбординг разработчиков
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью