记一次node内存泄漏排查与修复

前言

之前开发了一个node接口,该接口使用canvas绘制产品图提供给java端使用,在运行了一段时间后发现了内存泄漏问题

本文浅记下修复过程(ps:主要是记录下启动命令和访问地址,记不住😂)

正文

内存泄漏指的是未被js引擎自动回收的内存,它多出现在定时器、dom事件和闭包

而笔者恰好就犯了定时器的问题,如下图框红的位置即是修复过后的代码

但这似乎并不是主因,内存仍然在随着时间的推移而不断增加

故,需要借助工具来排查....

首先想到的肯定是node自身提供的inspect选项了

js 复制代码
node --inspect --heapsnapshot-signal=SIGUSR2 ./xxx.js

重新启动后,在chrome浏览器访问chrome://inspect/#devices,正常会出现如下页面

点击框红的位置,进入调试控制台切换到内存选项卡并生成初始快照,方便对比分析

然后访问接口,尝试复现问题

在新的快照中对比,发现canvas生成的图片uri会随着调用次数增加,这正是内存不断增加的罪魁祸首

最后,在代码中找到生成该data uri的地方

它被挂载到了上下文,根据该ctx的传入路径,它来自变量helpers对象的toWebAttrs方法,该对象被笔者定义到了页面顶部,即接口回调的外部,也就是说沿着闭包路径被留存了

因此,只需要在用完后delete掉即可

相关推荐
网络点点滴1 小时前
简述Node.js运行时核心架构
架构·node.js
小粉粉hhh2 小时前
Node.js(三)——模块化
node.js
晓杰'3 小时前
从0到1实现 Balatro 游戏后端(1):项目规划与牌型判断实现
后端·websocket·typescript·node.js·游戏开发·项目实战·nestjs
@PHARAOH3 小时前
WHAT - npm和corepack
前端·npm·node.js
MPGWJPMTJT3 小时前
从 Volta 迁移到 mise:Windows 下 Node 版本管理切换记录
前端·node.js
zhangfeng11334 小时前
Remotion 渲染视频脚本 ,自动化编辑视频 Node.js 层面是“单线程 JS”,但在实际渲染时是“高度并行”的。
node.js·自动化·音视频
羽师5 小时前
Node.js和npx关系
node.js
灵魂学者5 小时前
使用 Electron 打包项目构建 .EXE 桌面应用程序(简)
electron·node.js·vue·build·桌面应用程序
右耳朵猫AI5 小时前
Node.js技术周刊 2026年第14周
node.js
gogoing19 小时前
Node.js 模块查找策略(require 完整流程)
javascript·node.js