使用 --perf_basic_prof_only_functions 构建多个 node.js 进程的火焰图

Posted

技术标签:

【中文标题】使用 --perf_basic_prof_only_functions 构建多个 node.js 进程的火焰图【英文标题】:Building a flamegraph of multiple node.js processes while using --perf_basic_prof_only_functions 【发布时间】:2016-11-14 19:57:41 【问题描述】:

我们目前使用节点集群来充分利用我们的机器,并希望能够同时分析所有进程(仅函数调用,我们使用--perf_basic_prof_only_functions)。虽然获取信息和构建火焰图工作正常,但我们似乎获得了很多 [perf-$PID.map] 的条目,这使得看起来好像要么缺少一些调用来告诉工具之一来解释多个 perf 文件。

具体来说,我们正在做类似以下的事情:

sudo perf record -F 99 -o perf.data -p $PIDS -g -- sleep 30

sudo perf script -i perf.data > out.nodestacks

# Using http://github.com/brendangregg/FlameGraph
./stackcollapse-perf.pl < ../out.nodestacks | ./flamegraph.pl > ../flame.svg

但是查看perf script 的输出,有很多类似的条目:

3881ddc630da [unknown] (/tmp/perf-20350.map)
3881dc5aae44 [unknown] (/tmp/perf-20350.map)
3881dc7d7275 [unknown] (/tmp/perf-20350.map)
3881dc7d6f4b [unknown] (/tmp/perf-20350.map)
3881dc7d6953 [unknown] (/tmp/perf-20350.map)

还有其他人遇到过这个问题吗?谢谢!

【问题讨论】:

【参考方案1】:

您是否尝试使用 --perf_basic_prof(而不是 --perf_basic_prof_only_functions)? 至少这为我解决了一些缺失的、未翻译的条目。

在我的例子中,这些条目如下: 内置:JSEntryTrampoline 存根:JSEntryStub

【讨论】:

--perf_basic_prof 不是一个选项,因为不幸的是,我们现在不希望有大量持续增长的文件:(

以上是关于使用 --perf_basic_prof_only_functions 构建多个 node.js 进程的火焰图的主要内容,如果未能解决你的问题,请参考以下文章

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份