node.js process.memoryUsage()的返回值代表什么?

Mah*_*ahn 119 v8 node.js

从官方文档(来源):

process.memoryUsage()

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

var util = require('util');

console.log(util.inspect(process.memoryUsage()));
Run Code Online (Sandbox Code Playgroud)

这将产生:

{ rss: 4935680, heapTotal: 1826816, heapUsed: 650472 }
Run Code Online (Sandbox Code Playgroud)

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

究竟rss,heapTotalheapUsed代表什么?

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

tim*_*ian 127

为了回答这个问题,首先要了解V8的存储器方案.

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

  • 代码:正在执行的实际代码
  • Stack:包含所有值类型(基本体,如整数或布尔值),其中指针引用堆上的对象,指针定义程序的控制流
  • :专用于存储对象,字符串和闭包等引用类型的内存段. 在此输入图像描述

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

  • rss:居民集大小
  • heapTotal:堆的总大小
  • heapUsed:堆实际使用

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

  • 一张图片可以价值1000字. (34认同)
  • @bmacnaughton这个值1013字:) (7认同)
  • 我得到堆大小 > rss,这是怎么回事?rss,46.03MB 堆总计,97.06MB 堆已使用,89.45MB (4认同)
  • process.memoryUsage() 上有一个新属性“external”,任何人都知道 (3认同)
  • [rss,heapTotal,heapUsed] =>大小以兆字节为单位?千字节?你能在答案中加上这个吗?他们都是同一个单位吗? (2认同)
  • 考虑到问题是关于三个值,这仅解释了“rss”和堆之间的关系,但没有解释“heapTotal”和“heapUsed”之间的区别。IMO,这是问题的一半。 (2认同)

Ray*_*oal 38

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

所述是从新近分配的对象将来自(想到的存储器的部分malloc中C,或new在JavaScript).

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

  • 我不认为这是总的记忆.在我的机器上总内存是8GB,但是当我运行一个简单的节点进程时,RSS显示大约13MB,所以我认为它确实显示了这个进程在RAM中保存了多少内存. (4认同)
  • ``heapTotal``和``heapUsed``有什么区别? (3认同)
  • 可视化不同内存空间的图像:http://apmblog.dynatrace.com/wp-content/uploads/2015/11/DK_2.png (3认同)
  • @tiblu`prowTotal`是底层V8引擎分配的总堆空间,用于动态分配.`heapUsed`是在整个空间内使用的内存.两者都由V8管理,并且必要时可以增长/缩小. (2认同)

bvd*_*vdb 13

Node.js的doumentation其描述如下:

heapTotal 和 heapUsed指的是 V8 的内存使用情况。external指的是绑定到 V8 管理的 JavaScript 对象的 C++ 对象的内存使用。rss,Resident Set Size,是进程在主内存设备(即总分配内存的子集)中占用的空间量,包括堆、代码段和堆栈。

所有提到的值都以字节表示。因此,如果您只想打印它们,您可能希望将它们重新缩放为 MB:

const used = process.memoryUsage();
for (let key in used) {
  console.log(`Memory: ${key} ${Math.round(used[key] / 1024 / 1024 * 100) / 100} MB`);
}
Run Code Online (Sandbox Code Playgroud)

这会给你一个输出,如:

Memory: rss 522.06 MB
Memory: heapTotal 447.3 MB
Memory: heapUsed 291.71 MB
Memory: external 0.13 MB
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

29685 次

最近记录:

9 年,4 月 前