Skip to main content
Version: 6.x (latest)

Metrics in detail

This page describes the process characteristics and metrics that the N|Solid Runtime collects, and the few values that the N|Solid Console adds. Use it as a reference when you read nsolid.info() and nsolid.metrics() output, the nsolid-cli info and metrics commands, or data exported to OTLP and StatsD.

Process characteristics​

The two primary data sets, info and metrics, contain values recorded live by the N|Solid Agent. They include data about the system hosting the process, the process as a whole, and each thread in the process.

PropertyDescription
appThe application name, from NSOLID_APP (or its alias NSOLID_APPNAME), the nsolid.app or name property in package.json, or nsolid.start(). Defaults to untitled application.
appVersionThe application version, from the version property in package.json or appVersion in nsolid.start().
execPathThe absolute path of the N|Solid executable running the application.
idThe unique N|Solid agent ID. Unique per N|Solid process.
mainThe absolute path to the root module in the process's module tree.
iisNodeMain(iisnode only, when iisNode is enabled) The absolute path to the real main script.
nodeEnvThe value of NODE_ENV, otherwise the env property in the nsolid section of package.json. Defaults to prod.
pidThe host system's process ID for the process. Unique per host.
processStartThe time the process started, in milliseconds since the epoch.
tagsThe tags set with NSOLID_TAGS, the tags property in the nsolid section of package.json, or nsolid.start(). Up to 20 tags, each 2 to 140 bytes.
vulnsThe number of known vulnerabilities found in the modules of the process. This value is added by the N|Solid Console.

Core library versions​

The versions object in the info data lists the libraries built into Node.js core and added by N|Solid, with their versions. For example, from N|Solid 6.2.4 on Node.js 24:

versions: {
acorn: '8.16.0',
ada: '3.4.4',
amaro: '1.1.8',
ares: '1.34.6',
brotli: '1.2.0',
cldr: '48.0',
curl: '8.18.0',
grpc: '1.76.0',
icu: '78.2',
llhttp: '9.3.1',
merve: '1.2.2',
modules: '137',
napi: '10',
nbytes: '0.1.3',
ncrypto: '0.0.1',
nghttp2: '1.68.0',
nlohmann: '3.12.0',
node: '24.15.0',
nsolid: '6.2.4',
openssl: '3.5.5',
opentelemetry: '1.23.0',
protobuf: '6.33.2',
simdjson: '4.5.0',
simdutf: '6.4.0',
sodium: '1.0.21',
sqlite: '3.51.3',
tz: '2026a',
undici: '7.24.4',
unicode: '17.0',
uv: '1.51.0',
uvwasi: '0.0.23',
v8: '13.6.233.17-node.48',
zlib: '1.3.1-e00f703',
zmq: '4.3.5',
zstd: '1.5.7'
}

The exact set of keys depends on the Node.js and N|Solid versions and the build.

System information​

note

The host system may be physical hardware, a virtual machine, or a container.

PropertyDescription
archThe host system's CPU architecture.
cpuCoresThe host system's number of CPU cores (or hyperthreaded cores), as reported by the OS.
cpuModelThe host system's CPU model.
hostnameThe host system's configured hostname, unless overridden with NSOLID_HOSTNAME or the hostname property in the nsolid section of package.json.
kernelVersionThe Linux kernel version encoded as a number. 0 on other platforms.
platformThe host system's operating system platform.
totalMemThe host system's total memory, in bytes. This is the host's memory, not a container memory limit. Reported in the info data and, starting with N|Solid 6.3.0, also in the metrics.

System data​

PropertyDescription
freeMemThe host system's amount of free (unused) memory, in bytes.
load1mThe average number of processes on the host that were running or waiting for CPU time over the past minute.
load5m... over the past 5 minutes.
load15m... over the past 15 minutes.
systemUptimeThe host system's uptime, in seconds.
note

These numbers aren't correlated with the core that the process or its threads run on.

General process stats and information​

PropertyDescription
timestampWhen the metrics were collected, in milliseconds since the epoch.
blockInputOpCountThe number of file system input operations performed by the process.
blockOutputOpCountThe number of file system output operations performed by the process.
cpuSystemPercentThe percentage of CPU the process used in system calls, for example 4.1.
cpuUserPercentThe percentage of CPU the process used in user code, for example 7.4.
cpuPercentThe percentage of CPU used by the process, for example 11.5. Equal to user plus system. It's measured against a single core, so values above 100 are possible for multi-threaded workloads.
cpuLegacy alias of cpuPercent.
ctxSwitchInvoluntaryCountThe number of involuntary context switches away from the process, for example because a higher-priority process needed time or the process used up its time slice.
ctxSwitchVoluntaryCountThe number of voluntary context switches away from the process, where the process yielded before its time slice ended, usually to wait for an I/O resource.
pageFaultHardCountThe number of hard page faults triggered by the process: the process tried to read from memory, but the page had been moved to disk. These can be costly for performance.
pageFaultSoftCountThe number of soft page faults (page reclaims) triggered by the process: the page was still in memory but had to be remapped. Not a great cause for concern.
titleThe current system title of the process.
uptimeThe process uptime, in seconds.
userThe system user currently running the process. Reflects changes made at runtime.
rssThe resident set size (RSS): the total memory used by the process. All other active memory sections are subsets of RSS. If this value grows continually and never stabilizes, you likely have a memory leak.

Legacy POSIX process statistics​

These POSIX values are considered legacy but are kept for potential future use.

PropertyDescription
ipcReceivedCountThe number of IPC messages received by the process. Not used on modern platforms.
ipcSentCountThe number of IPC messages sent by the process. Not used on modern platforms.
signalCountThe number of signals received by the process. Not used on modern platforms.
swapCountThe number of times the process was swapped out of memory. Not used on modern platforms.

Per-thread metrics​

To support Node.js worker threads, the metrics that relate to a specific thread are reported separately for the main thread and for each worker thread.

PropertyDescription
threadNameThe name of the thread, if set with nsolid.setThreadName().
threadIdThe thread's ID. The main thread is 0.

JavaScript memory stats​

rss isn't specific to a thread, so it's listed with the process stats. Each thread's heapTotal and externalMem are subsets of the process's rss.

PropertyDescription
totalAvailableSizeThe remaining amount of memory the thread's heap can allocate before reaching the maximum heap size, in bytes.
totalHeapSizeExecutableThe total amount of executable memory (containing code instructions) allocated in the thread's heap, in bytes.
totalPhysicalSizeThe amount of physical memory currently committed for the thread's heap, in bytes.
heapSizeLimitThe maximum size of the thread's JavaScript heap, in bytes. If the allocator requests memory beyond this limit, V8 terminates the process with an allocation failure.
heapTotalThe thread's total allocated JavaScript heap size, in bytes. Includes the used portion (heapUsed) and spare memory. When heapUsed gets close to heapTotal, V8 allocates more memory; as the garbage collector frees objects, it can shrink.
heapUsedThe thread's used JavaScript heap size, in bytes: the memory storing all JavaScript objects and values. A key value to watch for memory leaks.
externalMemThe thread's memory allocated by Node.js outside of V8's heap but referenced from the heap, in bytes. This is where Buffers and native addon memory live. It may exceed RSS if large Buffers are allocated but not yet backed by physical memory.
numberOfNativeContextsThe number of attached contexts, typically created with the vm module to create additional V8 memory sandboxes.
numberOfDetachedContextsThe number of detached contexts that still hold memory and aren't being garbage collected.
mallocedMemoryThe amount of memory currently allocated with malloc by V8, in bytes.
peakMallocedMemoryThe largest amount of memory allocated with malloc by V8 over the life of the thread, in bytes.

Node.js event loop stats​

tip

To learn more about event loop utilization, read the event loop utilization blog post.

PropertyDescription
loopAvgTasksLegacy metric kept for backward compatibility. Don't rely on it.
loopEstimatedLagThe estimated time an I/O response may have to wait on the thread's event loop, in milliseconds.
loopIdlePercentThe percentage of time the event loop is waiting (idle) for I/O or timers.
loopTotalCountThe cumulative count of all event loop iterations. Legacy name for loopIterations.
loopIterationsThe total number of event loop iterations since the thread started.
loopIterWithEventsThe total number of event loop iterations since the thread started that had events to handle.
loopIdleTimeThe total time the event loop has spent idle since the thread started, in nanoseconds.
loopUtilizationThe ratio of time the event loop spends processing events rather than being idle. When this number grows, you may start to see latency spikes.
eventsProcessedThe total number of events processed by the event loop since the thread started.
eventsWaitingThe cumulative number of events that were already waiting in the queue when the event provider was polled. A growing rate indicates event loop lag.
providerDelayThe cumulative estimated time events spent waiting in the event queue before being received by the event loop, in nanoseconds.
processingDelayThe cumulative estimated time events waited, after being received by the event loop, before being processed, in nanoseconds.
res5sA moving average of the event loop's "responsiveness" over the past 5 seconds: the ratio of estimated event delay to processing time.
res1m... over the past minute.
res5m... over the past 5 minutes.
res15m... over the past 15 minutes.

JavaScript garbage collection stats​

PropertyDescription
gcCountThe total number of garbage collections of any type done by the thread.
gcDurUs99PtileThe 99th percentile duration of the thread's garbage collections, in microseconds. This is the cutoff for the slowest 1% of GC events.
gcDurUsMedianThe median duration of the thread's garbage collections, in microseconds.
gcForcedCountThe number of externally forced garbage collections on the thread, for example triggered by taking a heap snapshot.
gcFullCountThe number of garbage collections on the thread that collected all available garbage. Usually only seen when heapTotal is approaching heapSizeLimit.
gcMajorCountThe number of major garbage collections on the thread, such as a mark-sweep.

HTTP and DNS stats​

PropertyDescription
dnsCountThe total number of DNS lookups performed since the thread started.
dnsMedianThe median duration of DNS lookups, in milliseconds.
dns99PtileThe 99th percentile duration of DNS lookups, in milliseconds.
httpClientCountThe total number of outgoing HTTP(S) client requests performed.
httpClientAbortCountThe total number of outgoing HTTP(S) client requests canceled due to inactivity or by calling abort().
httpClientMedianThe median duration of completed outgoing HTTP(S) client requests, in milliseconds.
httpClient99PtileThe 99th percentile duration of completed outgoing HTTP(S) client requests, in milliseconds.
httpServerCountThe total number of incoming HTTP(S) requests served.
httpServerAbortCountThe total number of incoming HTTP(S) requests that were aborted.
httpServerMedianThe median duration of completed incoming HTTP(S) requests, in milliseconds.
httpServer99PtileThe 99th percentile duration of completed incoming HTTP(S) requests, in milliseconds. These are the slowest 1% of requests handled by your HTTP server.

I/O primitives​

As your application creates and uses I/O primitives, these metrics track the cumulative numbers over the life of the thread. They're good indicators of activity and can reveal memory leaks caused by I/O resources that aren't closed.

PropertyDescription
activeHandlesThe number of active libuv handles: long-lived asynchronous resources such as open sockets, servers, timers, and child processes.
activeRequestsThe number of active libuv requests: short-lived operations such as file system calls, DNS lookups, and socket writes.
pipeServerCreatedCountThe total number of server objects created using named pipes.
pipeServerDestroyedCountThe total number of pipe server objects torn down.
pipeSocketCreatedCountThe total number of pipe socket objects created.
pipeSocketDestroyedCountThe total number of pipe socket objects torn down.
tcpServerCreatedCountThe total number of TCP server objects created.
tcpServerDestroyedCountThe total number of TCP server objects torn down.
tcpSocketCreatedCountThe total number of TCP socket objects created.
tcpSocketDestroyedCountThe total number of TCP socket objects torn down.
udpSocketCreatedCountThe total number of UDP socket objects created.
udpSocketDestroyedCountThe total number of UDP socket objects torn down.
promiseCreatedCountThe total number of promises created. Requires promise tracking (see the note below).
promiseResolvedCountThe total number of promises resolved. Requires promise tracking.
fsHandlesOpenedCountThe total number of file system handles opened.
fsHandlesClosedCountThe total number of file system handles closed.
note

The N|Solid Runtime doesn't track promises by default. To enable it, set NSOLID_PROMISE_TRACKING=1 or set promiseTracking to true in your N|Solid configuration. You can also enable it from the N|Solid Console.

NodeSource Support