Node.js 如何排查内存泄漏?常见原因有哪些?

常见原因:

  1. 全局变量 / 闭包长期引用大对象
  2. 忘记清理的监听器(EventEmitter 反复 on 不 off)
  3. 缓存(Map/数组)只增不删,无上限
  4. 定时器(setInterval)引用未释放
  5. 队列堆积(消费速度 < 生产速度)

排查流程:

# 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 自动化分析。

同分类其他题目