使用 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
原始输出可能有点难以理解,因此通常使用原始文件生成火焰图以便更好地可视化。
![]()
要从此结果生成火焰图,请从第 6 步开始遵循本教程。
由于 perf 输出不是 Node.js 特定的工具,它可能在处理 Node.js 中 JavaScript 代码的优化方式时遇到问题。请参阅perf 输出问题以获取更多参考。