目录

node 查询内存使用情况

主要使用 process.memoryUsage() 方法。

memoryUsage 返回具有各种信息的对象:rssheapTotalheapUsedexternal

  • rss 代表 Resident Set Size,它是分配给进程执行的总内存
  • heapTotal 是分配的堆的总大小
  • heapUsed 是在执行过程中使用的实际内存

例子:

1
2
3
4
5
6
const arr = [1, 2, 3, 4, 5, 6, 9, 7, 8, 9, 10];
arr.reverse();
const used = process.memoryUsage();
for (let key in used) {
  console.log(`${key} ${Math.round((used[key] / 1024 / 1024) * 100) / 100} MB`);
}

补充

上文中的 rssheapTotalheapUsed 具体指什么?

为了回答这个问题,需要先了解 V8 的内存方案。

运行程序运行时始终会在内存中占用一定的空间。这个空间被称为 Resident Set。V8 使用类似于 Java 虚拟机的方案,并将内存划分为段:

  • Code: 实际被执行的代码
  • Stack(栈): 包含所有值类型(Integer 或 Boolean)的所有值类型,指针引用堆和指针定义程序的控制流程的指针
  • Heap(堆):专用于存储对象,字符串和闭包等引用类型的存储段。

./images/02.png

这样的话,问题就很好解答了

  • rss: Resident Set Size
  • heapTotal: Total Size of the Heap
  • heapUsed: Heap actually Used

参考文档: