使用堆分析器

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

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

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

堆分析器 - 分配时间线

堆分析器类似于抽样堆分析器,但它会跟踪每次分配。 它比抽样堆分析器具有更高的开销,因此不建议在生产中使用。

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

如何操作

启动应用程序

node --inspect index.js

--inspect-brk是脚本更好的选择。

连接到 Chrome 中的 dev-tools 实例,然后

  • 选择“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是脚本更好的选择。

连接到 dev-tools 实例,然后

  1. 选择“Memory”选项卡。
  2. 选择“Allocation sampling”。
  3. 开始分析。

heap profiler tutorial 4

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

heap profiler tutorial 5