Skip to content

Память

В этом документе вы можете узнать о том, как отлаживать проблемы, связанные с памятью.

Мой процесс исчерпывает память

Node.js (JavaScript) — это язык со сборкой мусора, поэтому утечки памяти возможны через удерживающие объекты (retainers). Поскольку приложения Node.js обычно являются многопользовательскими, критически важными для бизнеса и долго работающими, предоставление доступного и эффективного способа поиска утечки памяти имеет важное значение.

Симптомы

Пользователь наблюдает непрерывно растущее использование памяти (может быть быстрым или медленным, в течение дней или даже недель), а затем видит, как процесс аварийно завершается и перезапускается менеджером процессов. Процесс может работать медленнее, чем раньше, а перезапуски приводят к сбою некоторых запросов (балансировщик нагрузки отвечает кодом 502).

Побочные эффекты

  • Перезапуски процесса из-за нехватки памяти и потеря запросов
  • Увеличение активности GC приводит к увеличению использования ЦП и замедлению времени отклика
    • GC блокирует Event Loop, что приводит к замедлению
  • Увеличение подкачки памяти замедляет процесс (активность GC)
  • Может не хватить доступной памяти для получения Heap Snapshot

Мой процесс неэффективно использует память

Симптомы

Приложение использует неожиданно большой объем памяти и/или мы наблюдаем повышенную активность сборщика мусора.

Побочные эффекты

  • Увеличенное количество ошибок страниц
  • Более высокая активность GC и использование ЦП