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

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

171726 次浏览

在 Linux/Unix 上(注意: Mac OS 是 Unix)使用 top并按 M (Shift + M)按内存使用量对进程进行排序。

在 Windows 上使用任务管理器。

内置的 程序模块有一个方法 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 }

在这个简单的示例中,您可以看到分配一个包含10M 个元素的数组使用大约80MB (参见 heapUsed)。
如果查看 V8的源代码(Array::NewHeap::AllocateRawFixedArrayFixedArray::SizeFor) ,就会发现数组使用的内存是一个固定的值加上长度乘以指针的大小。后者在64位系统上为8字节,这证实了观察到的8 x 10 = 80MB 的内存差是有意义的。

此外,如果您想了解全局内存而不是节点进程’:

var os = require('os');


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

请参阅文档

你可以使用 node.js process.memoryUsage():

const formatMemoryUsage = (data) => `${Math.round(data / 1024 / 1024 * 100) / 100} MB`;


const memoryData = process.memoryUsage();


const memoryUsage = {
rss: `${formatMemoryUsage(memoryData.rss)} -> Resident Set Size - total memory allocated for the process execution`,
heapTotal: `${formatMemoryUsage(memoryData.heapTotal)} -> total size of the allocated heap`,
heapUsed: `${formatMemoryUsage(memoryData.heapUsed)} -> actual memory used during the execution`,
external: `${formatMemoryUsage(memoryData.external)} -> V8 external memory`,
};


console.log(memoryUsage);


/*
{
"rss": "177.54 MB -> Resident Set Size - total memory allocated for the process execution",
"heapTotal": "102.3 MB -> total size of the allocated heap",
"heapUsed": "94.3 MB -> actual memory used during the execution",
"external": "3.03 MB -> V8 external memory"
}
*/

如果使用 Express.js 框架,那么可以使用 快递状态监视器。它非常容易集成,并以图形格式提供 CPU 使用率、内存使用率、响应时间等。

enter image description here