Nodejs v8 getHeapSpaceStatistics方法 | 节点中的堆空间统计数据

306 阅读2分钟

在本教程中,您将通过实例学习nodejs的v8模块中的v8.getHeapSpaceStatistics() 方法,getHeapSpaceStatistics 方法根据空间返回关于堆大小的统计数据。v8是谷歌chrome的一个开源javascript引擎,被nodejs和Mongodb使用。

什么是v8中的空间?空间是由v8引擎分配的一大块内存。V8有以下不同的空间用于存储和清理堆内存中的对象:

  • 新空间:这是为新对象使用的小内存,用于快速收集对象的垃圾。
  • 旧指针空间:存储指向其他对象的长期存在的对象。
  • 旧数据空间:这些是对象,普通的原始数据没有对其他对象的引用。
  • 代码空间:用于编译和JIT执行的可执行内存。
  • 单元空间、属性-单元空间和地图空间。储存相同大小的单元属性和地图相关的对象。
  • 大对象空间:存储大对象

getHeapSpaceStatistics方法返回上述对象空间的统计数据。

每个对象都持有关于可用空间和物理堆大小的信息。

V8是一个被Nodejs环境内部使用的引擎。你可以查看Nodejs的 V8版本32位或64位

有时,为了调试节点内存不足的错误,我们需要了解环境和应用程序的堆大小。

为了获得上述所有信息,Nodejs有一个内置的模块v8 ,它有一个内置的getHeapSpaceStatistics ,以获得基于空间的堆内存分配的统计信息。

V8有另一个方法[getHeapStatistics](/nodejs-v8-getheapstatistics-method) ,用于统计整个系统中的堆内存。语法:

getHeapSpaceStatistics()

它返回一个具有以下属性的对象

  • space_name:所用空间的名称,例子是read_only_space,new_space,old_space,code_space,map_space,large_object_space,code_large_object_space,new_large_object_space
  • space_size:已分配的空间堆大小,以字节为单位
  • space_used_size:已用空间的堆大小,以字节为单位
  • space_available_size:可用空间堆大小(字节
  • physical_space_size:物理空间堆的大小(字节

这将提供有用的堆信息

v8 getHeapSpaceStatistics方法示例。

首先使用ES5语法中的require 关键字导入v8模块。

const v8module = require('v8');

下面是一个v8 getHeapSpaceStatistics方法的例子info.js的代码

const v8module = require('v8');  
console.log(v8module.getHeapSpaceStatistics());  

在命令行中使用node命令运行info.js。

node info.js

它输出一个对象

[
  {
    space_name: 'read_only_space',
    space_size: 151552,
    space_used_size: 150392,
    space_available_size: 0,
    physical_space_size: 151552
  },
  {
    space_name: 'new_space',
    space_size: 2097152,
    space_used_size: 881912,
    space_available_size: 165512,
    physical_space_size: 2097152
  },
  {
    space_name: 'old_space',
    space_size: 1458176,
    space_used_size: 1349464,
    space_available_size: 248,
    physical_space_size: 1458176
  },
  {
    space_name: 'code_space',
    space_size: 360448,
    space_used_size: 87456,
    space_available_size: 0,
    physical_space_size: 360448
  },
  {
    space_name: 'map_space',
    space_size: 528384,
    space_used_size: 262152,
    space_available_size: 0,
    physical_space_size: 528384
  },
  {
    space_name: 'large_object_space',
    space_size: 135168,
    space_used_size: 131112,
    space_available_size: 0,
    physical_space_size: 135168
  },
  {
    space_name: 'code_large_object_space',
    space_size: 0,
    space_used_size: 0,
    space_available_size: 0,
    physical_space_size: 0
  },
  {
    space_name: 'new_large_object_space',
    space_size: 0,
    space_used_size: 0,
    space_available_size: 1047424,
    physical_space_size: 0
  }
]