如何监控 Node.js 的内存使用情况?

2022-08-30 02:34:17

如何监控 Node.js 的内存使用情况?


答案 1

内置的进程模块具有一个方法 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(看一下 )。
如果你看一下 V8 的源代码(Array::NewHeap::AllocateRawFixedArrayFixedArray::SizeFor),那么你会看到数组使用的内存是一个固定值加上长度乘以指针的大小。后者在 64 位系统上为 8 个字节,这证实了观察到的 8 x 10 = 80MB 的内存差异是有意义的。heapUsed


答案 2

node-memwatch:检测并查找 Node 代码.JS内存泄漏。查看本教程跟踪节点中的内存泄漏.js