node内存泄漏总结

1. node内存泄漏情形

1.1 全局变量

全局变量不会被回收,需要手动设置为null或undefined

1.2 闭包

function out() {
  const bigData = new Buffer(100);
  inner = function () {
    void bigData;
  }
}

比如闭包中的变量被全局对象引用,则闭包中的局部变量,不能释放。inner是全局对象,bigData是局部变量。

1.3 缓存

服务器有并发和长时间运行的情况,若使用memoize等本地缓存,缓存的key长时间不能释放,会造成内存泄漏

1.4 监听器

事件监听器或socket listen错误的重复添加,忘记移除,会造成内存泄漏

2. node内存泄漏排查方式

2.1 首先从系统层面

用系统工具,观察内存和CPU使用变化,持续升高,则是内存泄漏

2.2 node-heapdump抓取快照

node-heapdump抓取内存快照, 得到profile文件,chrome的Memory工具,load profile文件,可以将多个profile导入,通常要3个,方便对比。

可以查看哪些对象有异常,对比3次的profile的差异。

具体可参考 Node.js 性能调优之内存篇(二)——heapdump

3. 避免内存泄漏

3.1 ESLint规范代码
3.2 避免复杂的闭包
3.3 一定要关闭事件监听和socket listen

posted @   全玉  阅读(2015)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2017-05-25 web标准,可用性和可访问性
点击右上角即可分享
微信分享提示