Ответы:
node-memwatch : обнаруживайте и находите утечки памяти в коде Node.JS. Проверьте это руководство по отслеживанию утечек памяти в Node.js
Во встроенном модуле процесса есть метод, memoryUsage
который позволяет получить представление об использовании памяти текущим процессом Node.js. Вот пример из Node v0.12.2 в 64-битной системе:
$ node --expose-gc
> process.memoryUsage(); // Initial usage
{ rss: 19853312, heapTotal: 9751808, heapUsed: 4535648 }
> gc(); // Force a GC for the baseline.
undefined
> process.memoryUsage(); // Baseline memory usage.
{ rss: 22269952, heapTotal: 11803648, heapUsed: 4530208 }
> var a = new Array(1e7); // Allocate memory for 10m items in an array
undefined
> process.memoryUsage(); // Memory after allocating so many items
{ rss: 102535168, heapTotal: 91823104, heapUsed: 85246576 }
> a = null; // Allow the array to be garbage-collected
null
> gc(); // Force GC (requires node --expose-gc)
undefined
> process.memoryUsage(); // Memory usage after GC
{ rss: 23293952, heapTotal: 11803648, heapUsed: 4528072 }
> process.memoryUsage(); // Memory usage after idling
{ rss: 23293952, heapTotal: 11803648, heapUsed: 4753376 }
В этом простом примере вы можете увидеть, что при выделении массива из 10 миллионов элементов-потребителей примерно 80 МБ (взгляните на heapUsed
).
Если вы посмотрите на исходный код V8 ( в Array::New
, Heap::AllocateRawFixedArray
, FixedArray::SizeFor
), то вы увидите , что память используется массив является фиксированное значение плюс длина умножается на размер указателя. Последний составляет 8 байт в 64-битной системе, что подтверждает, что наблюдаемая разница памяти в 8 x 10 = 80 МБ имеет смысл.
--expose-gc
для этой gc
функции?
--expose-gc
для process.memoryUsage()
. gc()
(Требование --expose-gc
) использовалось в ответе для детерминированного запуска сборки мусора, чтобы упростить просмотр process.memoryUsage
отчетов.
Кроме того, если вы хотите знать глобальную память, а не процесс узла:
var os = require('os');
os.freemem();
os.totalmem();
Оригинальный memwatch практически мертв. Вместо этого попробуйте memwatch-next , который, похоже, хорошо работает в современных версиях Node.
В Linux / Unix (примечание: Mac OS - это Unix) используйте top
и нажмите M ( Shift+ M), чтобы отсортировать процессы по использованию памяти.
В Windows используйте диспетчер задач.
Applications > Utilities
и вы найдете Activity Monitor
приложение. Это эквивалент диспетчера задач. OS X также имеет top
команду.
htop
вместо top в Linux. Это гораздо лучше.