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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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标准,可用性和可访问性