使用堆分析器
堆分析器在 V8 之上运行,以捕获随时间分配的内存。 在本文档中,我们将介绍使用以下方式进行内存分析
- 分配时间线
- 采样堆分析器
与使用堆快照指南中介绍的堆转储不同,使用实时分析的想法是了解一段时间内的分配情况。
堆分析器 - 分配时间线
堆分析器类似于采样堆分析器,不同之处在于它将跟踪每次分配。 它比采样堆分析器具有更高的开销,因此不建议在生产中使用。
您可以使用 @mmarchini/observe 以编程方式启动和停止分析器。
如何操作
启动应用程序
node --inspect index.js
--inspect-brk
对于脚本来说是更好的选择。
连接到 Chrome 中的开发工具实例,然后
- 选择
Memory
选项卡。 - 选择
Allocation instrumentation timeline
。 - 开始分析。
一旦堆分析正在运行,强烈建议运行样本以识别内存问题。 例如,如果我们正在对 Web 应用程序进行堆分析,我们可以使用 Apache Benchmark
来产生负载
$ ab -n 1000 -c 5 http://localhost:3000
然后,在负载完成后按下停止按钮
最后,查看快照数据
查看有用链接部分,了解有关内存术语的更多信息。
采样堆分析器
采样堆分析器跟踪内存分配模式和随时间推移的保留空间。 由于它是基于采样的,因此其开销足够低,可以在生产系统中使用。
您可以使用模块
heap-profiler
以编程方式启动和停止堆分析器。
如何操作
启动应用程序
$ node --inspect index.js
--inspect-brk
对于脚本来说是更好的选择。
连接到开发工具实例,然后
- 选择
Memory
选项卡。 - 选择
Allocation sampling
。 - 开始分析。
产生一些负载并停止分析器。 它将生成一个基于其堆栈跟踪的分配摘要。 您可以关注具有更多堆分配的函数,请参见下面的示例