PassFront
  1. PassFront
  2. База знаний
  3. Производительность и production

Как найти утечку памяти в Node.js-приложении?

Производительность и production

Утечка памяти — объекты остаются достижимыми и не собираются сборщиком мусора, поэтому память процесса растёт без остановки.

Типичные источники

  • Глобальные кеши и Map без ограничения размера и срока жизни.
  • Забытые подписчики EventEmitter и таймеры.
  • Замыкания, которые держат большие объекты.
  • Накопление данных в массивах-логах или очередях.

Как искать

  1. Посмотреть динамику: process.memoryUsage().heapUsed и метрики RSS в мониторинге.
  2. Запустить с --inspect и подключить Chrome DevTools.
  3. Снять два-три снимка кучи (Heap Snapshot) с интервалом и сравнить: смотреть, какие объекты прибавляют.
  4. Включить сравнение «Allocation instrumentation on timeline».
  5. В production можно получить снимок по сигналу: node --heapsnapshot-signal=SIGUSR2.
const cache = new Map();
function remember(key, value) {
  cache.set(key, value);
  if (cache.size > 1000) cache.delete(cache.keys().next().value); // ограничение размера
}

Коротко для собеседования

Сравниваем снимки кучи во времени и ищем растущие объекты. Лечим ограничением кешей, отпиской от событий и очисткой таймеров.

Другие вопросы раздела