记一次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掉即可

相关推荐
摇滚侠2 小时前
搭建前端开发环境 安装 nodejs 设置淘宝镜像 最简化最标准版本 不使用 NVM NVM 高版本无法安装低版本 nodejs
java·开发语言·node.js
tumeng071110 小时前
Node.JS 版本管理工具 Fnm 安装及配置(Windows)
windows·node.js
xrkhy11 小时前
MacOS M3 安装nvm以及node.js
macos·node.js
xiaohe0712 小时前
Node.js NativeAddon 构建工具:node-gyp 安装与配置完全指南
node.js
不愿透露姓名的大鹏12 小时前
Linux环境下Node.js后台运行方式(实用版)
linux·运维·node.js
学习3人组12 小时前
windows系统下nvm的安装
node.js·nvm
sunwenjian88613 小时前
node.js下载、安装、设置国内镜像源(永久)(Windows11)
node.js
#做一个清醒的人13 小时前
Electron 保活方案:用子进程彻底解决原生插件崩溃问题
前端·electron·node.js
云天00114 小时前
前端私活神器,nodejs+vue3+typescript全栈框架,
前端·后端·node.js
吴声子夜歌14 小时前
Node.js——WebSocket
websocket·网络协议·node.js