The parser is developed to analyze Node.JS slow performance issue or understand process running status at given time. It works as analyzing Node.exe directly and generating diagnostic report for it. Currently it supports the default Node.JS version on Azure Web APP (0.10.32 X86) with multiple instances.

After report generated, download the report zip file and unzip it.

Note: To analyze other Node.JS versions which are not supported in DaaS yet, please check:

There is is a HTML report. To quick go through the report, click the report link in the index page index.xhtml:

Then in the detailed report page, click the Menu items on left pane

The report information includes:

Node.exe Process Summary

On the Process section, you can hover mouse cursor around counters, it can give more explanations in tooltip

Threads Running Time

This lists all thread running time in User Mode

Running HTTP Request

If the main thread runs a HTTP Request, it will dump out URL and Query information.

JavaScript call stack on Threads

Node.JS executes sync tasks on one single main thread. If there is any JavaScript code running on the single main thread, the report will parser the JavaScript call stack as below:

For the call frame which runs JavaScript function, click the Hyperlink of the call frame number, the function source code will be displayed and rendered with JavaScript Syntax:

Native C/C++ and JS Stack Traces on Threads

This gives you a complete view for all running call frames on each thread, not only JavaScript, but also native calls (such as Node and V8 modules). Regarding the thread which contains JavaScript frames, it also shows Arguments object list for each JS frame.

Active Handles in Async Queue

Node.JS supports async calls. It is possible that all threads don’t explicitly execute JavaScript tasks on call stacks, but many async tasks are pending executing or waiting for callback. The pending async tasks associate active handles in the async queue (a double link structure). By looking at the handles and related objects we can know the nature of those async tasks and then perform necessary tuning.