@dnlup/doc

中文文档
5.0.4发布于 2025/02/18ISCTypeScriptCommonJS近 30 天下载 4740

Get usage and health data about your Node.js process

原始使用文档
文档目录17 节
  1. Installation
  2. Usage
  3. Examples
  4. API
  5. doc([options])
  6. Class: doc.Sampler
  7. Class: CpuMetric
  8. Class: ResourceUsageMetric
  9. Class: EventLoopDelayMetric
  10. Class: EventLoopUtilizationMetric
  11. Class: GCMetric
  12. gcMetric.pause
  13. Class: GCEntry
  14. Class: GCAggregatedEntry
  15. doc.errors
  16. Diagnostics Channel support
  17. License

doc

npm version Tests Benchmarks codecov Known Vulnerabilities

Get usage and health data about your Node.js process.

doc is a small module that helps you collect health metrics about your Node.js process. It does that by using only the API available on Node itself (no native dependencies). It doesn't have any ties with an APM platform, so you are free to use anything you want for that purpose. Its API lets you access both computed and raw values, where possible.

Installation

latest stable version
$ npm i @dnlup/doc
latest development version
$ npm i @dnlup/doc@next

Usage

You can import the module by using either CommonJS or ESM.

By default doc returns a Sampler instance that collects metrics about cpu, memory usage, event loop delay and event loop utilization.

Importing with CommonJS
const doc = require('@dnlup/doc')

const sampler = doc() // Use the default options

sampler.on('sample', () => {
  doStuffWithCpuUsage(sampler.cpu.usage)
  doStuffWithMemoryUsage(sampler.memory)
  doStuffWithEventLoopDelay(sampler.eventLoopDelay.computed)
  doStuffWithEventLoopUtilization(sampler.eventLoopUtilization.utilization) // Available only on Node versions that support it
})
Importing with ESM
import doc from '@dnlup/doc'

const sampler = doc()

sampler.on('sample', () => {
  doStuffWithCpuUsage(sampler.cpu.usage)
  doStuffWithMemoryUsage(sampler.memory)
  doStuffWithEventLoopDelay(sampler.eventLoopDelay.computed)
  doStuffWithEventLoopUtilization(sampler.eventLoopUtilization.utilization) // Available only on Node versions that support it
})
Note

A Sampler holds a snapshot of the metrics taken at the specified sample interval. This behavior makes the instance stateful. On every tick, a new snapshot will overwrite the previous one.

Enable/disable metrics collection

You can disable the metrics that you don't need.

const doc = require('@dnlup/doc')

// Collect only the event loop delay
const sampler = doc({ collect: { cpu: false, memory: false } })

sampler.on('sample', () => {
  // `sampler.cpu` will be `undefined`
  // `sampler.memory` will be `undefined`
  doStuffWithEventLoopDelay(sampler.eventLoopDelay.computed)
  doStuffWithEventLoopUtilization(sampler.eventLoopUtilization.utilization) // Available only on Node versions that support it
})

You can enable more metrics if you need them.

Garbage collection
const doc = require('@dnlup/doc')

const sampler = doc({ collect: { gc: true } })
sampler.on('sample', () => {
  doStuffWithCpuUsage(sampler.cpu.usage)
  doStuffWithMemoryUsage(sampler.memory)
  doStuffWithEventLoopDelay(sampler.eventLoopDelay.computed)
  doStuffWithEventLoopUtilization(sampler.eventLoopUtilization.utilization) // Available only on Node versions that support it
  doStuffWithGarbageCollectionDuration(sampler.gc.pause)
})
Active handles
const doc = require('@dnlup/doc')

const sampler = doc({ collect: { activeHandles: true } })

sampler.on('sample', () => {
  doStuffWithCpuUsage(sampler.cpu.usage)
  doStuffWithMemoryUsage(sampler.memory)
  doStuffWithEventLoopDelay(sampler.eventLoopDelay.computed)
  doStuffWithEventLoopUtilization(sampler.eventLoopUtilization.utilization) // Available only on Node versions that support it
  doStuffWithActiveHandles(sampler.activeHandles)
})

Examples

You can find more examples in the examples folder.

API

doc([options])

It creates a metrics Sampler instance with the given options.

Class: doc.Sampler

Metrics sampler.

It collects the selected metrics at a regular interval. A Sampler instance is stateful so, on each tick, only the values of the last sample are available. Each time the sampler emits the sample event, it will overwrite the previous one.

new doc.Sampler([options])

  • options <Object>
    • sampleInterval <number>: sample interval (ms) to get a sample. On each sampleInterval ms a sample event is emitted. Default: 1000 Under the hood the package uses monitorEventLoopDelay to track the event loop delay.
    • autoStart <boolean>: start automatically to collect metrics. Default: true.
    • unref <boolean>: unref the timer used to schedule the sampling interval. Default: true.
    • gcOptions <Object>: Garbage collection options
    • eventLoopDelayOptions <Object>: Options to setup monitorEventLoopDelay. Default: { resolution: 10 }
    • collect <Object>: enable/disable the collection of specific metrics.
      • cpu <boolean>: enable cpu metric. Default: true.
      • resourceUsage <boolean>: enable resourceUsage metric. Default: false.
      • eventLoopDelay <boolean>: enable eventLoopDelay metric. Default: true.
      • eventLoopUtilization <boolean>: enable eventLoopUtilization metric. Default: true on Node version 12.19.0 and newer.
      • memory <boolean>: enable memory metric. Default: true.
      • gc <boolean>: enable garbage collection metric. Default: false.
      • activeHandles <boolean>: enable active handles collection metric. Default: false.

If options.collect.resourceUsage is set to true, options.collect.cpu will be set to false because the cpu metric is already available in the resource usage metric.

Event: 'sample'

Emitted every sampleInterval, it signals that new data the sampler has collected new data.

sampler.start()

Start collecting metrics.

sampler.stop()

Stop collecting metrics.

sampler.cpu

Resource usage metric instance.

sampler.resourceUsage

Resource usage metric instance.

sampler.eventLoopDelay

Event loop delay metric instance.

sampler.eventLoopUtilization

Event loop utilization metric instance.

sampler.gc

Garbage collector metric instance.

sampler.activeHandles

  • <number>

Number of active handles returned by process._getActiveHandles().

sampler.memory

  • <object>

Object returned by process.memoryUsage().

Class: CpuMetric

It exposes both computed and raw values of the cpu usage.

cpuMetric.usage

  • <number>

Cpu usage in percentage.

cpuMetric.raw

  • <object>

Raw value returned by process.cpuUsage().

Class: ResourceUsageMetric

It exposes both computed and raw values of the process resource usage.

resourceUsage.cpu

  • <number>

Cpu usage in percentage.

resourceUsage.raw

  • <object>

Raw value returned by process.resourceUsage().

Class: EventLoopDelayMetric

It exposes both computed and raw values about the event loop delay.

eventLoopDelay.computed

  • <number>

Event loop delay in milliseconds. It computes this value using the mean of the Histogram instance.

eventLoopDelay.raw

  • <Histogram>

Exposes the Histogram instance.

eventLoopDelay.compute(raw)

  • raw <number> The raw value obtained using the Histogram API.
  • Returns <number> The computed delay value.

Class: EventLoopUtilizationMetric

It exposes statistics about the event loop utilization.

eventLoopUtilization.idle

  • <number>

The idle value in the object returned by performance.eventLoopUtilization() during the sampleInterval window.

eventLoopUtilization.active

  • <number>

The active value in the object returned by performance.eventLoopUtilization() during the sampleInterval window.

eventLoopUtilization.utilization

  • <number>

The utilization value in the object returned by performance.eventLoopUtilization() during the sampleInterval window.

eventLoopUtilization.raw

  • <object>

Raw value returned by performance.eventLoopUtilization() during the sampleInterval window.

Class: GCMetric

It exposes the garbage collector activity statistics in the specified sampleInterval using hdr histograms.

new GCMetric(options)

  • options <object>: Configuration options

gcMetric.pause

It tracks the global activity of the garbage collector.

gcMetric.major

The activity of the operation of type major. It's present only if GCMetric has been created with the option aggregate equal to true.

See performanceEntry.kind.

gcMetric.minor

The activity of the operation of type minor. It's present only if GCMetric has been created with the option aggregate equal to true.

See performanceEntry.kind.

gcMetric.incremental

The activity of the operation of type incremental. It's present only if GCMetric has been created with the option aggregate equal to true.

See performanceEntry.kind.

gcMetric.weakCb

The activity of the operation of type weakCb. It's present only if GCMetric has been created with the option aggregate equal to true.

See performanceEntry.kind.

Class: GCEntry

It contains garbage collection data, represented with an histogram. All timing values are expressed in nanoseconds.

new GCEntry()

The initialization doesn't require options. It is created internally by a GCMetric.

gcEntry.totalDuration

  • <number>

It is the total time of the entry in nanoseconds.

gcEntry.totalCount

  • <number>

It is the total number of operations counted.

gcEntry.mean

  • <number>

It is the mean value of the entry in nanoseconds.

gcEntry.max

  • <number>

It is the maximum value of the entry in nanoseconds.

gcEntry.min

  • <number>

It is the minimum value of the entry in nanoseconds.

gcEntry.stdDeviation

  • <number>

It is the standard deviation of the entry in nanoseconds.

gcEntry.getPercentile(percentile)

  • percentile <number>: Get a percentile from the histogram.
  • Returns <number> The percentile

Class: GCAggregatedEntry

It extends GCEntry and contains garbage collection data plus the flags associated with it (see https://nodejs.org/dist/latest-v18.x/docs/api/perf_hooks.html#performanceentryflags).

new GCAggregatedEntry()

The initialization doesn't require options. It is created internally by a GCMetric.

gcAggregatedEntry.flags

  • <object>

This object contains the various histograms of each flag.

gcAggregatedEntry.flags.no

gcAggregatedEntry.flags.constructRetained

gcAggregatedEntry.flags.forced

gcAggregatedEntry.flags.synchronousPhantomProcessing

gcAggregatedEntry.flags.allAvailableGarbage

gcAggregatedEntry.flags.allExternalMemory

gcAggregatedEntry.flags.scheduleIdle

doc.errors

In the errors object are exported all the custom errors used by the module.

ErrorError CodeDescription
InvalidArgumentErrorDOC_ERR_INVALID_ARGAn invalid option or argument was used
NotSupportedErrorDOC_ERR_NOT_SUPPORTEDA metric is not supported on the Node.js version used

Diagnostics Channel support

Node diagnostics channel are supported.

const diagnosticsChannel = require('diagnostics_channel')
const doc = require('@dnlup/doc)

diagnosticsChannel.subscribe(doc.constants.DOC_CHANNEL, s => {
  console.log('A new instance', s)
})

diagnosticsChannel.subscribe(doc.constants.DOC_SAMPLES_CHANNEL, s => {
  console.log('A new sample', s)
})

doc()

License

ISC

版本与发布记录

@dnlup/doc 共发布 28 个版本,首次发布于 2020/03/31;过去 12 个月发布了 0 个版本。

版本发布日期距今
5.0.4latest2025/02/181.7 年前
5.0.32023/12/182 年前
5.0.22023/11/093 年前
5.0.12023/11/023 年前
5.0.02023/11/023 年前
4.0.12021/03/175 年前

其他发布通道:next → 4.0.0-3。

关于 @dnlup/doc 的常见问题

@dnlup/doc 是什么?

Get usage and health data about your Node.js process

如何安装 @dnlup/doc?

在项目目录运行 npm install @dnlup/doc,或使用 pnpm add / yarn add / bun add。

@dnlup/doc 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@dnlup/doc 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@dnlup/doc 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=18。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@dnlup/doc 可以商用吗?

@dnlup/doc 使用 ISC 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@dnlup/doc 的下载量有多少?

根据 npm 官方下载统计,@dnlup/doc 在 2026/10/13 – 2026/11/11 这 30 天内被下载 4,740 次,日均约 158 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@dnlup/doc 还在维护吗?

最新版本 5.0.4 发布于 2025/02/18(1.7 年前);至今共发布 28 个版本,其中过去 12 个月发布了 0 个;首次发布于 2020/03/31。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。