服务跑一周内存从 200M 涨到 1.5G,重启就好。
排查:
- heapdump 抓快照对比,看到大量闭包对象
- 顺着引用链找到是 EventEmitter 的监听器堆积
原因:每次请求都给全局 emitter 加监听,但从不解绑。请求量大了就堆积。
解法:
- 用完 removeListener
- 或者用 once 而不是 on
- 或者每个请求用独立的 emitter
另外加了监控:定期打印 listenerCount,超过阈值报警。
这类问题在长连接、轮询、WebSocket 场景特别常见。
主楼- 暂无回复
继续逛逛