使用堆分析器

堆分析器在 V8 之上运行,以捕获一段时间内的分配。在本文件中,我们将介绍使用以下方法进行内存分析:

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

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

堆内存分析器 - 内存分配时间线

堆内存分析器类似于采样堆内存分析器,区别在于它会跟踪每个内存分配。它比采样堆内存分析器开销更高,因此不建议在生产环境中使用。

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

操作方法

启动应用程序

node --inspect index.js

--inspect-brk 对于脚本来说是更好的选择。

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

  • 选择 内存 选项卡。
  • 选择 内存分配时间线
  • 开始分析。

heap profiler tutorial step 1

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

$ ab -n 1000 -c 5 http://localhost:3000

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

heap profiler tutorial step 2

最后,查看快照数据。

heap profiler tutorial step 3

查看 有用链接 部分以获取有关内存术语的更多信息。

采样堆分析器

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

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

操作方法

启动应用程序

$ node --inspect index.js

--inspect-brk 对于脚本来说是更好的选择。

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

  1. 选择 内存 选项卡。
  2. 选择 内存分配采样
  3. 开始分析。

heap profiler tutorial 4

产生一些负载并停止分析器。它将生成一个摘要,其中包含基于堆栈跟踪的内存分配。您可以关注堆内存分配更多的函数,请参见下面的示例。

heap profiler tutorial 5