151

来自官方文档(来源):

process.memoryUsage()

返回一个对象,以字节为单位描述 Node 进程的内存使用情况。

var util = require('util');

console.log(util.inspect(process.memoryUsage()));

这将产生:

{ rss: 4935680, heapTotal: 1826816, heapUsed: 650472 }

heapTotal 和 heapUsed 指的是 V8 的内存使用情况。

rssheapTotalheapUsed 究竟代表什么?

这似乎是一个微不足道的问题,但我一直在寻找,到目前为止我找不到明确的答案。

4

4 回答 4

203

要回答这个问题,首先要了解 V8 的 Memory Scheme。

一个正在运行的程序总是通过分配在内存中的一些空间来表示。这个空间被称为Resident Set。V8 使用类似于 Java 虚拟机的方案,将内存划分为段:

  • 代码:正在执行的实际代码
  • 堆栈:包含所有值类型(如整数或布尔值之类的原语),指针引用堆上的对象,指针定义程序的控制流
  • :专门用于存储引用类型(如对象、字符串和闭包)的内存段。 在此处输入图像描述

现在很容易回答这个问题:

  • rss:驻留集大小
  • heapTotal:堆的总大小
  • heapUsed : 实际使用的堆

参考http ://apmblog.dynatrace.com/2015/11/04/understanding-garbage-collection-and-hunting-memory-leaks-in-node-js/

于 2016-06-27T08:54:30.130 回答
40

RSS驻留集大小,进程内存中保存在 RAM 中的部分(与交换空间或文件系统中保存的部分相反)。

是新分配的对象将来自的内存部分(想想CmallocnewJavaScript)。

您可以在Wikipedia上阅读有关堆的更多信息。

于 2012-08-19T01:05:37.967 回答
17

Node.js 文档描述如下:

heapTotal 和 heapUsed指的是 V8 的内存使用情况。external是指绑定到 V8 管理的 JavaScript 对象的 C++ 对象的内存使用情况。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
于 2019-12-10T19:09:18.883 回答
2

让我们用一个例子来做这个

以下示例将向您展示内存使用量的增加实际上将如何增加rssheapTotal

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 并相应地增加 Resident Set Size( rss)

于 2020-05-06T17:32:12.110 回答