0

我正在尝试学习 Node.js 应用程序的性能调优。我想要的第一件事是火焰图。由于我在 Windows 平台上工作,因此我按照本手册获取火焰图。

但是,我在这一步堆叠:

xperf -i perf.etl -o perf.csv -symbols 在此处输入图像描述

我不擅长 xperf。有人可以告诉我如何通过这个问题并获得火焰图吗?

4

1 回答 1

0

值得指出的是,xperf 可以记录许多不同类型的调用堆栈。您可以获取每个文件 I/O、磁盘 I/O、上下文切换、注册表访问等的调用堆栈,并且可以创建其中任何一个的火焰图。但是,我假设您需要 CPU 采样数据的火焰图。

您可以在我的博客上找到一种稍微不同的技术,用于从 xperf 采样数据创建火焰图,这里是:

https://randomascii.wordpress.com/2013/03/26/summarizing-xperf-cpu-usage-with-flame-graphs/

你没有说你的问题是什么——那一步出了什么问题——所以我会给出一些通用的建议:

  1. 尝试使用非常短的跟踪 - 只需几秒钟 - 以在实验时使过程尽可能快。
  2. 尝试将跟踪加载到 WPA 中,以确保您可以在那里看到采样数据。您可能会发现不需要火焰图,因为 WPA 为您提供了以图形方式探索数据的方法。将跟踪加载到 WPA 还使您有机会确保符号加载,并使 WPA 有机会将符号转换为 .symcache 文件,这将使处理步骤运行更快。
  3. 确保您已将 _NT_SYMBOL_PATH 设置为指向 Microsoft 的符号服务器以及您可能需要的任何其他服务器。
  4. 考虑使用 wprui 而不是批处理文件记录跟踪:https ://randomascii.wordpress.com/2013/04/20/xperf-basics-recording-a-trace-the-easy-way/

您可以通过使用有点新的 wpaexporter 来改进火焰图生成过程,方法是不将所有xperf 数据导出为文本,我在此处记录:

https://randomascii.wordpress.com/2013/11/04/exporting-arbitrary-data-from-xperf-etl-files/

但是,这将需要重新编写脚本,并且可能比您想要的工作量更多。

于 2015-02-22T02:43:43.990 回答