处理node.js分析时,“未知代码的代码移动事件”是什么意思?

时间:2019-09-26 16:28:14

标签: node.js profiling v8

在节点(v10.15.3)中,我一直在使用node --prof <script>进行概要分析,然后使用node --prof-process <output>来汇总输出。生成的摘要有很多无法解释的滴答声,运行第二步时可能会导致一系列错误,类似于以下内容:

...
Code move event for unknown code: 0x3663777f8b98
Code move event for unknown code: 0x3663777f9018
Code move event for unknown code: 0x3663777f9790
Code move event for unknown code: 0x36635f5fb5a8
Code move event for unknown code: 0x3663777f9b78
Code move event for unknown code: 0x3663777f9d00
Code move event for unknown code: 0x3663777fa150
Code move event for unknown code: 0x3663777fa7f8
Code move event for unknown code: 0x36635f5fe630

此“未知代码的代码移动事件”错误表示什么?有没有补救办法可以在我进行性能分析调查时提供更多详细信息?

2 个答案:

答案 0 :(得分:1)

简而言之:这意味着有些不可思议,对此您可能无能为力:-(

--prof生成的日志文件除其他外,包含三种相关类型的条目:

(1)“在地址A上创建的功能F的代码对象,大小为S”

(2)“代码对象从地址A1移到地址A2”

(3)“执行样本是在地址E上获取的”

滴答处理器使用类型(1)和(2)的条目来构建对应于函数的代码对象的映射,因此,当它看到类型(3)的条目时,它将寻找正确的函数,使得A < = E && E <= A + S,然后将其报告为已收到探查器刻度。

当有关数据的某些信息不一致时,可能会发生以下情况:日志文件在地址(A1)中从未提及的假定的代码对象中包含一个假定的代码对象的移动事件(类型为(2)的条目) )之前。在这种情况下,滴答处理器不知道该怎么办,因此会打印警告。

您的猜测可能与看到许多不明的滴答声有关,这很可能是正确的。

您可以尝试的一种解决方法(可能有帮助或无济于事)是指定--nocompact-code-space--prof不必要是必需的,但是然后您 也不必为未知代码获取这些移动事件...

答案 1 :(得分:1)

找到了根本原因。就我而言,这是因为对于MacOS,符号是通过c++filtnm处理的。后者由于以下原因无法正常工作:

» nm --version                                                                                                                                           
Agreeing to the Xcode/iOS license requires admin privileges, please run “sudo xcodebuild -license” and then retry this command.

运行此命令以接受许可证后,符号可以正确解析。