使用堆分析器

堆分析器在 V8 之上运行,用于捕获一段时间内的内存分配情况。在本文档中,我们将介绍如何使用以下工具进行内存分析:

  1. 分配时间线
  2. 采样堆分析器

使用堆快照指南中介绍的堆转储不同,使用实时分析的目的是为了了解一段时间内的内存分配情况。

堆分析器 - 分配时间线

堆分析器与采样堆分析器类似,但它会跟踪每一次内存分配。它的开销比采样堆分析器高,因此不建议在生产环境中使用。

您可以使用 @mmarchini/observe 以编程方式启动和停止分析器。

操作方法

启动应用程序

node --inspect index.js

对于脚本,--inspect-brk 是一个更好的选择。

在 Chrome 中连接到开发者工具实例,然后

  • 选择 Memory(内存)选项卡。
  • 选择 Allocation instrumentation timeline(分配检测时间线)。
  • 开始分析。

heap profiler tutorial step 1

一旦堆分析开始运行,强烈建议运行一些示例以识别内存问题。例如,如果我们正在对一个 Web 应用程序进行堆分析,我们可以使用 Apache Benchmark 来产生负载:

$ ab -n 1000 -c 5 https://:3000

然后,在负载完成后按停止按钮

heap profiler tutorial step 2

最后,查看快照数据

heap profiler tutorial step 3

有关内存术语的更多信息,请查看有用链接部分。

采样堆分析器

采样堆分析器可跟踪一段时间内的内存分配模式和预留空间。由于它基于采样,其开销足够低,可以在生产系统中使用。

您可以使用 heap-profiler 模块以编程方式启动和停止堆分析器。

操作方法

启动应用程序

$ node --inspect index.js

对于脚本,--inspect-brk 是一个更好的选择。

连接到开发者工具实例,然后

  1. 选择 Memory(内存)选项卡。
  2. 选择 Allocation sampling(分配采样)。
  3. 开始分析。

heap profiler tutorial 4

产生一些负载然后停止分析器。它将根据堆栈跟踪生成一个包含内存分配的摘要。您可以关注那些堆分配较多的函数,请参见下面的示例

heap profiler tutorial 5