Node VM(NVM)
APM Insight Node.js 代理从 Node.js Chrome V8 中收集关键指标数据。这些指标让您深入了解 Node.js VM 的行为,并帮助您提升应用程序的性能。代理还会收集 CPU 指标,通常与垃圾回收(GC)指标一起进行分析。
原生模块及前提条件
Node.js 需要一个额外的原生模块,才能收集与垃圾回收和事件循环数据相关的 Node.js VM 指标时间片数据。但内存和 CPU 使用率无论是否安装额外的原生模块,均可正常收集。
- 安装 Node.js 代理时(v3.0.0 或更高版本),原生模块会自动安装。
- 安装过程中,原生模块首先尝试在目标机器上从源代码编译构建。如果构建失败,Node.js 会向控制台打印堆栈跟踪信息,可忽略该信息。
- 如果原生模块构建成功,您可以看到所有指标,包括垃圾回收、内存使用、事件循环数据和 CPU 使用率。如果构建失败,则只能看到内存和 CPU 相关指标。
安装 Node.js 原生模块的前提条件包括:
请按照 node-gyp 包的说明,在您的部署平台上编译原生模块。
| 平台 | 推荐的 Python 版本 | 环境要求 |
| Unix/Linux | v3.7、v3.8、v3.9 或 v3.10 | Make、C/C++ 编译器(如 GCC) |
| macOS | v3.7、v3.8、v3.9 或 v3.10 | Xcode 命令行工具 |
| Windows | v3.7、v3.8、v3.9 或 v3.10 | Visual C++ 构建环境 |
请注意,以下三项基本要求缺一不可,否则构建将失败,客户端将无法获得 GC 和事件循环指标。
- Python
- 编译器
- NPX - 从 NPM 5.2.0 起,NPX 已预置捆绑。低于该版本时,必须单独安装 NPX。
查看 NVM 指标
通过 NVM 指标,获取有用的运行时数据,用于排查性能问题并监控应用程序的健康状况。
在客户端查看 NVM 指标:
- 登录 Site24x7 Web 客户端。
- 导航至 APM > 您的 Node.js 应用程序 > 点击 Node VM 标签页。
- 选择需要查看指标的时间范围。

您将获得图表和指标,可用于排查性能问题。
示例:
- 当应用程序开始使用更多对象时,内存使用量会增加,垃圾回收(GC)运行频率也会提高。由于 GC 所用时间增加,CPU 使用率也会随之上升。
- 过多的同步代码执行会导致 CPU 使用率升高,这将在每次 tick 最大 CPU 时间图表中出现峰值。
使用图表进行性能推断
在右上角,您还可以选择需要查看指标的时间范围。

GC 暂停时间
该图表描述了垃圾回收所花费的时间。GC 时间出现峰值通常表示存在问题。
GC 暂停频率
该图表显示每分钟执行的 GC 次数。
内存使用量
该图表显示 Node.js 进程消耗的内存量。
| 参数 | 描述 |
| non_heap (MB) | V8 堆外数据占用的内存(例如缓冲区或套接字)。 |
| free (MB) | V8 为内存池预留的内存量。此内存未被主动使用,但 V8 会根据需要从中自由分配更多内存。 |
| used (MB) | V8 正在使用的内存量(例如 JavaScript 对象)。 |

CPU 使用率
该图表显示 Node.js 进程的 CPU 使用率。
| 参数 | 描述 |
| user (%) | 执行用户代码所用时间占挂钟时间的比例。 |
| system (%) | 代表 Node.js 进程在系统内核中执行所用时间占挂钟时间的比例。 |
每分钟事件循环 Tick 数
该图表显示每分钟事件循环 tick 的次数。一个 tick 是事件循环的一次轮转,在此期间执行所有已就绪的函数。
Node.js 在每次事件循环轮转期间等待待处理的 I/O 操作完成。当收到 I/O 事件时,事件循环会执行所有相关的回调函数。因此,每分钟的 tick 次数对应 I/O 事件发生的频率。
每次 tick 最大 CPU 时间
该图表显示每分钟单次 tick 所花费的最长时间。这有助于识别异常长的事件循环 tick,这表明存在较长时间的同步代码执行。
