使用 Linux Perf

Linux Perf 提供低级 CPU 分析,包括 JavaScript、原生和操作系统级别的帧。

重要:本教程仅适用于 Linux。

操作方法

Linux Perf 通常可以通过 linux-tools-common 包获得。通过 --perf-basic-prof--perf-basic-prof-only-functions,我们可以启动支持 perf_events 的 Node.js 应用程序。

--perf-basic-prof 将始终写入文件(/tmp/perf-PID.map),这会导致磁盘无限增长。如果这是个问题,请使用模块:linux-perf--perf-basic-prof-only-functions

两者之间的主要区别在于 --perf-basic-prof-only-functions 产生的输出更少,它是生产环境分析的可行选择。

# Launch the application an get the PID
$ node --perf-basic-prof-only-functions index.js &
[1] 3870

然后根据所需频率记录事件

$ sudo perf record -F 99 -p 3870 -g

在此阶段,您可能希望在应用程序中使用负载测试以生成更多记录以进行可靠的分析。工作完成后,通过向命令发送 SIGINT(Ctrl-C)关闭 perf 进程。

perf 将在 /tmp 文件夹中生成一个文件,通常称为 /tmp/perf-PID.map(在上面的示例中:/tmp/perf-3870.map),其中包含每个调用的函数的跟踪。

要将这些结果聚合到特定文件中,请执行以下操作

$ sudo perf script > perfs.out

原始输出可能难以理解,因此通常使用原始文件生成火焰图以更好地可视化。

Example nodejs flamegraph

要从该结果生成火焰图,请按照本教程中的步骤 6 进行操作。

由于 perf 输出不是特定于 Node.js 的工具,因此它可能在 Node.js 中优化 JavaScript 代码的方式方面存在问题。有关更多参考,请参阅perf 输出问题

阅读时间
2 分钟阅读
贡献
编辑此页面
目录
  1. 操作方法
  2. 有用链接