在 nodejs 上分析 JavaScript 代码 - 可能的方法
Posted
技术标签:
【中文标题】在 nodejs 上分析 JavaScript 代码 - 可能的方法【英文标题】:Profiling JavaScript Code on nodejs - Possible Approaches 【发布时间】:2014-02-05 07:30:28 【问题描述】:我的目标是为 nodejs 开发一个 java 脚本分析器。 要求如下:
-
应该能够获取调用堆栈。
获取时间戳信息。
获取迭代次数。
我主要担心的是我不应该修改源文件(.js 文件)。
我已经在 node js 上看到了所有可用的 javascript 代码分析选项。我面临的问题是,它们中的大多数都需要将分析特定代码手动注入到我的源代码中。这是一个例子
var profiler = new Profiler() //需要在我的.js文件中创建profiler
profiler.startProfiling()
//我的代码
profiler.endProfling()
因为大多数分析器都需要这种代码注入。 任何人都可以建议我任何其他分析替代方案(不需要修改源代码)。
目前我正在使用 node js 提供的 v8 功能来分析我的 JavaScript 代码。例如
node --prof MyTestApp.js
这个命令给了我一个 v8.log 。这是sample log
这是我的疑问
-
v8 是否有可能的解决方法,以便我可以添加时间戳信息,函数的迭代计数
是否有任何其他分析工具(v8 除外)可以满足我的要求。
感谢帮助
【问题讨论】:
【参考方案1】:您可以使用英特尔 VTune Amplifier XE 来分析 JS 代码。简而言之,您将能够看到您的 JS 函数收集的样本以及这些样本如何通过 JS 源文件分发。此外,VTune 显示完整的调用堆栈信息,包括 java (JIT) 帧和本机帧(本机代码,例如,系统库或从 JS 代码调用的本机库)。 无需在代码中注入任何内容,但您应该重新构建 Node.js(不到 5 分钟)。
如何在 Node.js 中启用 VTune 支持
-
下载 node.js sources(每晚构建)。
请注意,最后一个版本是 v0.10.25,但它包含不支持 VTune 的 v8。 v0.11.11 升级到 v8 v.3.22.24.19,支持 VTune。
只需添加 3 行即可启用 VTune 支持
在 \src\node.cc 中添加 2 行
#include "v8-vtune.h" // located in \deps\v8\src\third_party\vtune
void Init(...)
…
V8::SetFlagsFromCommandLine(&v8_argc, const_cast(v8_argv), true);
vTune::InitializeVtuneForV8();
在 \node.gyp 文件中添加 1 行 以添加和构建 VTune 支持
'target_name': 'node',
'type': 'executable',
'dependencies': [
'node_js2c#host',
'deps/v8/src/third_party/vtune/v8vtune.gyp:v8_vtune',
],
运行位于根 node-v0.11.11 文件夹中的“vcbuild.bat nosign”
现在您已准备好使用 VTune 分析在 Node.js 中运行的 JS 代码
如何使用 VTune 分析 Node.js
VTune 可以在here 下载。先试用评估版。
我的小应用 - test.js
<pre> <code> function say(word)
console.log("Calculating ...");
var res = 0;
for (var i = 0; i < 20000; i++)
for (var j = 0; j < 20000; j++)
res = i * j / 2;
console.log("Done.");
console.log(word);
function execute(someFunction, value)
someFunction(value);
execute(say, "Hello from Node.js!"); </code> </pre>
-
打开 VTune (bin32\amplxe-gui.exe)
创建一个新项目
将“node.exe”指定为要运行的应用程序,将“test.js”指定为应用程序的参数
点击确定,然后点击新建分析
选择“高级热点”作为分析类型并选中“热点、堆栈和上下文切换”以指定在分析会话期间收集的信息级别。开始分析。
当收集停止时,VTune 将显示样本如何通过 JS 函数分布。您可以深入了解函数,以查看示例如何通过某个 JS 函数的源代码行分布。
【讨论】:
以上是关于在 nodejs 上分析 JavaScript 代码 - 可能的方法的主要内容,如果未能解决你的问题,请参考以下文章
javascript NodeJ在Windows上处理Ctrl + C.
在 Azure 上使用 Apple Pay JavaScript/NodeJS