Node.js runtime metrics
Node.js runtime metrics are gathered and reported by the node library transparently to the application. The metrics cover the interval being reported, e.g., the CPU usage reported covers the interval, not the entire time the application has been running. All time-based metrics are reported in microseconds (millionths of a second).
These metrics are available in the Metrics Explorer. Reporting is enabled by default and make available the metrics described below. To disable reporting please refer to the runtimeMetrics
property or SW_APM_RUNTIME_METRICS
environment variable in the configuration guide.
CPU metrics are the same data as node's process.cpuUsage() function returns.
Metric | Description |
trace.node.process.cpuUsage.user | process.cpuUsage().user |
trace.node.process.cpuUsage.system | process.cpuUsage().system |
Memory metrics are taken from process.memoryUsage() and v8.getHeapStatistics().
Metric | Description |
trace.node.process.memoryUsage.rss | resident set size |
trace.node.process.memoryUsage.heapTotal | bytes in v8 heap |
trace.node.process.memoryUsage.heapUsed | bytes used in v8 heap |
trace.node.process.memoryUsage.external | bytes for C++ objects bound to JS objects managed by v8 |
trace.node.v8.heapStatistics.total_heap_size | bytes allocated by v8 for the heap |
trace.node.v8.heapStatistics.heap_size_executable | bytes for compiled bytecode |
trace.node.v8.heapStatistics.total_physical_size | committed size of heap |
trace.node.v8.heapStatistics.total_available_size | bytes available |
trace.node.v8.heapStatistics.used_heap_size | bytes used by application data |
trace.node.v8.heapStatistics.heap_size_limit | absolute limit the heap cannot exceed |
trace.node.v8.heapStatistics.malloced_memory | amount of memory obtained via malloc |
trace.node.v8.heapStatistics.peak_malloced_memory | peak amount of memory obtained via malloc |
Garbage collection metrics are gathered by the @solarwinds-apm/bindings C++ node addon and measure how long major and minor garbage collection events take. They use the v8 garbage collection callbacks which provide a part of the garbage collection cost. These times are indicative of the costs of garbage collection but should not be used as absolute values. Garbage collection in node is increasingly being moved to interleaved and background mechanisms that neither compete with the application for resources nor can be accurately measured in a meaningful way.
Metric | Description |
trace.node.gc.count | count of major and minor GC events |
trace.node.gc.time | microseconds taken by the GC events |
trace.node.gc.[major|minor].count | count of GC events |
trace.node.gc.[major|minor].p50 | 50th percentile time |
trace.node.gc.[major|minor].p75 | 75th percentile time |
trace.node.gc.[major|minor].p90 | 90th percentile time |
trace.node.gc.[major|minor].p95 | 95th percentile time |
trace.node.gc.[major|minor].p99 | 99th percentile time |
trace.node.gc.[major|minor].min | minimum time |
trace.node.gc.[major|minor].max | maximum time |
trace.node.gc.[major|minor].mean | arithmetic mean |
trace.node.gc.[major|minor].stddev | standard deviation |
Eventloop metrics are gathered by the @solarwinds-apm/bindings C++ node addon. They measure how long the application portion of the eventloop takes to execute. The percentiles are generally the most informative metrics because infrequent longer eventloop delays have little impact on the application.
Metric | Description |
trace.node.eventloop.p50 | 50th percentile time to complete |
trace.node.eventloop.p75 | 75th percentile time to complete |
trace.node.eventloop.p90 | 90th percentile time to complete |
trace.node.eventloop.p95 | 95th percentile time to complete |
trace.node.eventloop.p99 | 99th percentile time to complete |
trace.node.eventloop.min | Minimum time to complete |
trace.node.eventloop.max | maximum time to complete |
trace.node.eventloop.mean | arithmetic mean of time to complete |
trace.node.eventloop.stddev | standard deviation of time to complete |