N|Solid is a profiling engine for NodeJS applications. You install it to replace your standard NodeJS runtime while profiling, and you provide environment variables to your process during launch to tell it where a N|Solid engine lives.
Watch this video to get a feel for how to use N|Solid to profile your applications.
As of N|Solid 1.4, there are downloadable all-in-one setup programs for Debian/Ubuntu, RHEL and CentOS, as well as MacOS X. They've combined a series of three scripts into a launcher, placed it in a commonly-found location (/usr/local/nsolid for OSX, /opt/nsolid for Linux) and even given you an environment script to source to set up your shell.
For more information, read on…
Launching your application in N|Solid
In your OS command line, you can run
source /usr/local/nsolid/nsolid-env, and then launch the N|Solid profiling engine with
Configuring your application to be monitored by N|Solid is almost too easy, provided you have the N|Solid version of
node (also called
nsolid) in your path as well. You have to add launch environment variables to the front of your startup script.
A launcher for an application fired up via node looks like this:
nsolid_APPNAME=BADAPPL NSOLID_HUB=2379 nsolid server.js
NSOLID_APPNAMEsends a name to the Console for your application to help you distinguish it from other NodeJS servers
NSOLID_HUBpoints to the process launched with
./launch-N|Solid-proxy.sh, a NodeJS engine that watches for network traffic from your application server once launched. Your NodeJS process will feed its telemetry data to that proxy port
nsolidcan be replaced by
nodeor any other NodeJS utility, such as
pm2if you're launching a set of clustered services
Tip – don't block the NodeJS Event Loop
How do you write code that is friendly to the event loop in NodeJS applications? In several ways: by using asynchronous external APIs, avoiding long-running processes, and writing applications that yield up time to the processor if they run for more than a few milliseconds.
Wrap-up and future articles
In the screencast above we took a tour of N|Solid, and used it to profile an application under load. We exported our reports from N|Solid to the Chrome CPU profiler.
In upcoming articles we'll focus on monitoring memory usage with snapshots, and how to run clusters to handle significant load using PM2 and stress test them with Artillery, a great load generator tool.