我尝试做使用Linux作为perf_events由布伦丹·格雷格描述的一些分析的NodeJS 这里.
工作流程如下:
--perf-basic-prof,这将创建/tmp/perf-(PID).map写入JavaScript符号映射的文件.perf record -F 99 -p `pgrep -n node` -g -- sleep 30stackcollapse-perf.pl脚本折叠堆栈flamegraph.pl脚本生成svg火焰图我得到以下结果(开头看起来非常好):

问题是有很多[unknown]元素,我认为应该是我的nodejs函数调用.我假设整个过程在第3点失败,其中perf数据应该使用由node/v8生成的映射来折叠--perf-basic-prof./tmp/perf-PID.map在节点执行期间创建文件并将一些映射写入其中.
如何解决这个问题呢?
我使用的是CentOS 6.5 x64,并且已经尝试使用节点0.11.13,0.11.14(预建和编译),但没有成功.
我有一些我正在尝试分析的现有代码。我可以通过@profile使用kernprof添加装饰器来成功地排列配置文件类方法。
有没有一种通用的方法来分析类实例化?我有几个类具有非常复杂的继承结构。当我尝试分析它们的 init 函数时,我得到如下信息:
Line # Hits Time Per Hit % Time Line Contents
==============================================================
179 def __init__(self, data):
180 1 8910739.0 8910739.0 100.0 super().__init__(data)
181 1 10.0 10.0 0.0 self.mortgage_rate = 5.2 # rate in percentage
Run Code Online (Sandbox Code Playgroud)
这有点没用,因为我不知道__init__正在调用什么实际的父函数(这个类有 2 个父级,每个父级都有一个或多个父级)。
有什么办法可以做得更好吗?例如,有没有办法自动潜入每条线,并分析它调用的线(深度有限)?