Відповіді:
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 х 10 = 80 МБ має сенс.
--expose-gc
для gc
функції?
--expose-gc
для process.memoryUsage()
. gc()
(вимагає --expose-gc
) було використано у відповіді з метою детермінованого запуску збору сміття, щоб було легше зрозуміти, які process.memoryUsage
звіти.
Крім того, якщо ви хочете знати глобальну пам'ять, а не процес вузла ":
var os = require('os');
os.freemem();
os.totalmem();
Оригінальний меморіал по суті мертвий. Спробуйте замість цього memwatch-next , який, здається, добре працює в сучасних версіях Node.
У Linux / Unix (примітка: Mac OS - це Unix) використовуйте top
та натисніть M ( Shift+ M) для сортування процесів за допомогою використання пам'яті.
У Windows використовуйте диспетчер завдань.
Applications > Utilities
і ви знайдете Activity Monitor
додаток. Цей еквівалент диспетчера завдань. У OS X також є top
команда.
htop
замість верху на Linux. Це набагато краще.