如何使用xperf检查nodejs的调用堆栈?

时间:2014-11-21 10:11:01

标签: node.js stack-trace xperf

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

但是,我已经完成了这一步:

xperf -i perf.etl -o perf.csv -symbols enter image description here

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

1 个答案:

答案 0 :(得分: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/
  5. 你可以通过使用我在这里记录的一些新wpaexporter 将xperf数据的所有导出到文本来改进火焰图生成过程:

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

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