Node.js 如何排查内存泄漏?常见原因有哪些?
常见原因:
- 全局变量 / 闭包长期引用大对象
- 忘记清理的监听器(
EventEmitter反复on不off) - 缓存(Map/数组)只增不删,无上限
- 定时器(
setInterval)引用未释放 - 队列堆积(消费速度 < 生产速度)
排查流程:
# 1) 启动时限制内存上限并暴露诊断
node --max-old-space-size=2048 --inspect app.js
# 2) 抓取堆快照(需 heapdump / clinic 或 SIGUSR2)
node -e "require('heapdump').writeSnapshot('before.heapsnapshot')"
# 触发操作后再抓一次 after.heapsnapshot,对比差异用 Chrome DevTools → Memory → 对比两次快照,按「Retainers」找持续增长的引用链。生产可用 clinic.js / @risingstack/trace 自动化分析。