Node.js 中的 perf_hooks.monitorEventLoopDelay([options]) 函数

2025年3月18日 | 阅读时长 4 分钟

在 Node.js 中,"perf_hooks.monitorEventLoopDelay([options])" 是一个特殊用途的函数,用于评估事件循环的效率。事件循环是处理所有异步进程执行的主要机制。它有助于维护 非阻塞 I/O 操作,例如文件读取、网络请求处理和计时器。

然而,当事件循环因操作过载时,其效率可能会下降,导致处理速度变慢,并可能在处理 异步 任务时出现瓶颈。

"monitorEventLoopDelay()" 函数 有助于确定事件 循环 的延迟,通常称为事件循环延迟,这使用户能够了解事件循环出现非常高延迟的实例,这可能表明系统负载过重、资源竞争或代码效率低下。

此函数是现有函数,返回一个 Histogram 对象,用于跟踪事件循环延迟。它提供了诸如延迟的最小值、最大值、平均值和标准差等统计信息。使用“resolution”选项,开发人员还可以设置一个采样率,该采样率定义了测量延迟的频率。

为了实现这些目标,开发人员可以使用 "monitorEventLoopDelay()" 来检测性能问题、提高应用程序性能,并确保在需要处理大量异步任务的环境中,应用程序能够按预期执行。

方法 1:用于诊断的基本监控

以下是用于诊断的最简单的基本监控形式,称为 monitorEventLoopDelay(),其中会定期测量事件循环延迟的程度并记录信息。这是一种非常基本的方法,适用于需要实时监控事件循环以确定任务处理是否存在积压的轻量级应用程序。

示例

让我们举一个例子来说明 Node.js 中的 perf_hooks.monitorEventLoopDelay([options]) 函数。

输出

 
Event Loop Delay Diagnostics (Logged at 2024-09-11T09:16:37.473Z):
    Minimum delay: 10043392 ms
    Maximum delay: 76283903 ms
    Mean delay   : 11315496.542986425 ms
    Standard deviation: 6149236.318436448 ms
    50th percentile: 10108927 ms
    95th percentile: 13606911 ms
    99th percentile: 46825471 ms  
Event loop delay data logged successfully.   

说明

在此示例中,提供的代码使用 ''perf_hooks.monitorEventLoopDelay()'' 方法持续检查事件循环中的延迟并记录这些数据。它以 10ms 的分辨率启动监视器以跟踪延迟,并以 5 秒的间隔记录最小、最大、平均延迟和百分位数等基本统计信息。这些日志数据同时打印在控制台和名为“event_loop_delay_logs. Txt”的文件中。请注意,监控会在 1 分钟后自行停止。在这里,可以使用一些信号(如“SIGINT”和“SIGTERM”)来管理关闭。例如,该代码对于例行性能退化分析很有用,因为在分析事件循环时,可以实时识别效率低下之处。