【问题标题】:Profiling JavaScript Code on nodejs - Possible Approaches在 nodejs 上分析 JavaScript 代码 - 可能的方法
【发布时间】:2014-02-05 07:30:28
【问题描述】:

我的目标是为 nodejs 开发一个 java 脚本分析器。 要求如下:

  1. 应该能够获取调用堆栈。
  2. 获取时间戳信息。
  3. 获取迭代次数。

我主要担心的是我不应该修改源文件(.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

这是我的疑问

  1. v8 是否有可能的解决方法,以便我可以添加时间戳信息,函数的迭代计数
  2. 是否有任何其他分析工具(v8 除外)可以满足我的要求。

感谢帮助

【问题讨论】:

    标签: javascript node.js profiling v8 callstack


    【解决方案1】:

    您可以使用英特尔 VTune Amplifier XE 来分析 JS 代码。简而言之,您将能够看到您的 JS 函数收集的样本以及这些样本如何通过 JS 源文件分发。此外,VTune 显示完整的调用堆栈信息,包括 java (JIT) 帧和本机帧(本机代码,例如,系统库或从 JS 代码调用的本机库)。 无需在代码中注入任何内容,但您应该重新构建 Node.js(不到 5 分钟)。

    如何在 Node.js 中启用 VTune 支持

    1. 下载 node.js sources(每晚构建)。 请注意,最后一个版本是 v0.10.25,但它包含不支持 VTune 的 v8。 v0.11.11 升级到 v8 v.3.22.24.19,支持 VTune。
    2. 只需添加 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',
        ], 
    3. 运行位于根 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>
    
    1. 打开 VTune (bin32\amplxe-gui.exe)
    2. 创建一个新项目
    3. 将“node.exe”指定为要运行的应用程序,将“test.js”指定为应用程序的参数
    4. 点击确定,然后点击新建分析
    5. 选择“高级热点”作为分析类型并选中“热点、堆栈和上下文切换”以指定在分析会话期间收集的信息级别。开始分析。
    6. 当收集停止时,VTune 将显示样本如何通过 JS 函数分布。您可以深入了解函数,以查看示例如何通过某个 JS 函数的源代码行分布。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-05
      • 2010-10-07
      • 1970-01-01
      • 2011-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多