从官方文档(source):
process.memoryUsage()
返回描述Node进程的内存使用情况的对象 以字节为单位。
var util = require('util'); console.log(util.inspect(process.memoryUsage()));
这将产生:
{ rss: 4935680, heapTotal: 1826816, heapUsed: 650472 }
heapTotal和heapUsed是指V8的内存使用情况。
究竟 rss , heapTotal 和 heapUsed 代表什么?
这似乎是一个微不足道的问题,但我一直在寻找,到目前为止我找不到明确的答案。
答案 0 :(得分:113)
为了回答这个问题,首先要了解V8的记忆方案。
正在运行的程序总是通过内存中分配的一些空间来表示。此空间称为常驻设置。 V8使用类似于Java虚拟机的方案,并将内存划分为多个段:
现在很容易回答这个问题:
答案 1 :(得分:37)
RSS 是resident set size,进程内存中保存在RAM中的部分(与交换空间或文件系统中保存的部分相对)。
堆是新分配对象来自的内存部分(想想C中的malloc
或JavaScript中的new
)。
您可以在Wikipedia了解有关堆的更多信息。
答案 2 :(得分:1)
让我们举一个例子
下面的示例将向您展示内存使用量的增加实际上如何增加rss
和heapTotal
const numeral = require('numeral');
let m = new Map();
for (let i = 0; i < 100000; i++) {
m.set(i, i);
if (i % 10000 === 0) {
const { rss, heapTotal } = process.memoryUsage();
console.log( 'rss', numeral(rss).format('0.0 ib'), heapTotal, numeral(heapTotal).format('0.0 ib') )
}
}
运行上面将为您提供以下信息:
rss 22.3 MiB 4734976 4.5 MiB
rss 24.2 MiB 6483968 6.2 MiB
rss 27.6 MiB 9580544 9.1 MiB
rss 27.6 MiB 9580544 9.1 MiB
rss 29.3 MiB 11419648 10.9 MiB
rss 29.3 MiB 11419648 10.9 MiB
rss 29.3 MiB 11419648 10.9 MiB
rss 32.8 MiB 15093760 14.4 MiB
rss 32.9 MiB 15093760 14.4 MiB
rss 32.9 MiB 15093760 14.4 MiB
这清楚地向您展示了如何使用变量并不断增加其所需的空间来增加heapTotal并相应地增加常驻集大小(rss
)
答案 3 :(得分:0)
Node.js doumentation对其描述如下:
heapTotal和heapUsed 是指V8的内存使用情况。 外部是指 C ++对象绑定到JavaScript对象管理的内存使用情况 V8 rss,居民集大小,是 主内存设备(是总分配内存的子集) 该过程包括堆,代码段和堆栈。
所有提及的值均以字节表示。因此,如果只想打印它们,则可能希望将它们重新缩放为MB:
const used = process.memoryUsage();
for (let key in used) {
console.log(`Memory: ${key} ${Math.round(used[key] / 1024 / 1024 * 100) / 100} MB`);
}
这将为您提供如下输出:
Memory: rss 522.06 MB
Memory: heapTotal 447.3 MB
Memory: heapUsed 291.71 MB
Memory: external 0.13 MB