标准答案
- 使用 event loop delay、event loop utilization 和请求 P99 观察主线程是否被占用。
- 延迟高且 CPU profile 集中在 JavaScript 栈,通常更像计算或同步阻塞。
- 延迟正常但请求慢,可能卡在网络、线程池、连接池或下游服务。
- 监控应按版本、路由、实例和时间窗口聚合,不能只看进程平均值。
题目解析
event loop delay 和 event loop utilization 描述主线程是否及时运行,不能代表请求从网关到下游的完整耗时。要和路由 P99、连接池、线程池、DNS、数据库和 HTTP timing 关联。
延迟高且 profile 集中在 JavaScript 栈,通常指向同步计算、JSON、正则或微任务;延迟正常但请求慢,可能是在等待网络、连接池或下游。
监控要按实例、路由、版本和时间窗口聚合,并设置采样和告警。扩容只能缓解可分散的主线程工作,不能修复共享锁、下游限额或重试放大。
常见误区
- 误区:只看 Node CPU。改正:结合 event loop delay、CPU profile、I/O、连接池和请求 timing。
- 误区:事件循环延迟高就盲目增加实例。改正:先确认是可横向分散的计算,还是单实例代码阻塞或共享下游瓶颈。
- 误区:用 setTimeout 延迟作为唯一监控。改正:使用 event loop delay/utilization,并关联业务 P99 和错误率。