Profiling Javascript Code On Nodejs - Possible Approaches
Solution 1:
You can use Intel VTune Amplifier XE to profile JS code. In short, you will be able to see the samples collected by your JS functions and how these samples distributed through JS source files. In addition, VTune displays complete call stack information which includes java (JIT) frames and native frames (native code, for example, system library or native library called from JS code). No need to inject anything in your code but you should rebuild Node.js (it takes less than 5 mins).
How to enable VTune support in Node.js
- Download node.js sources (nightly build). Note that last release is v0.10.25 but it contains v8 without VTune support. v0.11.11 is upgraded to v8 v.3.22.24.19 with VTune support.
Enable VTune support by adding just 3 lines
Add 2 lines in \src\node.cc
#include"v8-vtune.h"// located in \deps\v8\src\third_party\vtunevoidInit(...){ … V8::SetFlagsFromCommandLine(&v8_argc, const_cast(v8_argv), true); vTune::InitializeVtuneForV8(); }
Add 1 line in \node.gyp file to add and build VTune support
'target_name': 'node', 'type': 'executable', 'dependencies': [ 'node_js2c#host', 'deps/v8/src/third_party/vtune/v8vtune.gyp:v8_vtune', ],
- Run "vcbuild.bat nosign" located in root node-v0.11.11 folder
Now you ready to profile JS code running in Node.js using VTune
How to profile Node.js using VTune
VTune can be downloaded here . Try evaluation version first.
My small app - test.js
<pre> <code> functionsay(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);
}
functionexecute(someFunction, value) {
someFunction(value);
}
execute(say, "Hello from Node.js!"); </code> </pre>
- Open VTune (bin32\amplxe-gui.exe)
- Create a new project
- Specify “node.exe” as application to run and “test.js” as app’s parameters
- Click OK, then New Analysis
- Choose “Advance Hotspots” as analysis type and check “Hotspots, stacks and context switched” to specify level of information collected during profiling session. Start profiling.
- When collection is stopped that VTune will display how the samples distributed through JS functions. You can dive into function to see how the samples distributed through source lines for a certain JS function.
Post a Comment for "Profiling Javascript Code On Nodejs - Possible Approaches"