277 字
1 分钟
Node.js 性能调优:Event Loop 监控与内存泄漏排查
为什么 Node.js 会慢?
Node.js 是单线程事件驱动的。这意味着任何阻塞主线程的操作(哪怕只有几毫秒)都会导致所有请求延迟增加。
常见的性能杀手:
- JSON.parse/stringify 处理巨型对象。
- 正则回溯 (ReDoS)。
- 同步文件 IO。
监控 Event Loop 延迟
要量化“卡顿”,最直接的指标是 Event Loop Lag。
我们可以使用 perf_hooks 来测量:
const { monitorEventLoopDelay } = require('perf_hooks');const h = monitorEventLoopDelay({ resolution: 20 });h.enable();
setInterval(() => { console.log(`Min: ${h.min}, Max: ${h.max}, Mean: ${h.mean}`);}, 1000);如果 Max 延迟经常超过 100ms,说明你的服务已经处于亚健康状态了。
内存泄漏排查三板斧
- Heap Dump:使用
heapdump库生成快照。 - Chrome DevTools:将快照导入 Chrome,使用 “Comparison” 视图对比前后两个快照,看哪些对象在持续增加。
- 弱引用 (WeakRef):在调试环境中使用弱引用检查对象是否被回收(仅限调试,不要用于生产逻辑)。
结语
性能优化不是玄学,是数据驱动的科学。不要盲目猜测,先监控,再定位,最后优化。
Node.js 性能调优:Event Loop 监控与内存泄漏排查
https://www.oferry.com/posts/a21/