web-dev-qa-db-ja.com

Node.jsのメモリ使用量を監視する方法は?

Node.jsのメモリ使用量を監視するにはどうすればよいですか?

87
fsiaonma

node-memwatch :Node.JSコードのメモリリークを検出および検出します。このチュートリアルを確認してください Node.jsでのメモリリークの追跡

59
Damodaran

組み込みの process モジュールにはメソッド memoryUsage があり、現在のNode.jsプロセスのメモリ使用量に関する洞察を提供します。 64ビットシステムのNode v0.12.2の例を次に示します。

$ 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 }

この単純な例では、10Mエレメントの配列の割り当てが約80MBを消費していることがわかります(heapUsedを見てください)。
V8のソースコード( Array::NewHeap::AllocateRawFixedArrayFixedArray::SizeFor )を見ると、メモリが使用されていることがわかります配列によるとは、固定値にポインタのサイズを掛けた長さを加えたものです。後者は64ビットシステムでは8バイトであり、8 x 10 = 80MBのメモリの差が意味をなすことを確認します。

125
Rob W

また、ノードプロセスではなくグローバルメモリを知りたい場合:

var os = require('os');

os.freemem();
os.totalmem();

ドキュメントを参照

37
Voy

元の memwatch は本質的に死んでいます。代わりに memwatch-next を試してください。これは、Nodeの最新バージョンでうまく機能しているようです。

26
Joel

Linux/Unix(注:Mac OSはUnix)では、topを使用してM(Shift+M)メモリ使用量でプロセスをソートします。

Windowsでは、タスクマネージャーを使用します。

3
Robin Green