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

相关推荐
eRRA OFAG15 小时前
Windows 上彻底卸载 Node.js
windows·node.js
❀͜͡傀儡师18 小时前
Claude Code 官方弃用 npm 安装方式:原因分析与完整迁移指南
前端·npm·node.js·claude code
dgvri19 小时前
Node.js使用教程
node.js·编辑器·vim
2601_9498161619 小时前
Node.js npm 安装过程中 EBUSY 错误的分析与解决方案
前端·npm·node.js
2601_9491942619 小时前
TypeScript 与后端开发Node.js
javascript·typescript·node.js
2601_9498153321 小时前
Node.js HTTP模块详解:创建服务器、响应请求与客户端请求
服务器·http·node.js
2601_9498158421 小时前
Node.js NativeAddon 构建工具:node-gyp 安装与配置完全指南
node.js
不会敲代码12 天前
手写一个「迷你 Cursor」:从零构建 AI 编程助手(LangChain + Tool Calling 实战)
langchain·node.js·cursor
不做超级小白2 天前
把图片压小,但不糊:reduceUrImgs项目关键点拆解
前端·开源·node.js
阿赛工作室2 天前
符合欧盟安全标准的 Node.js + Vue3 全栈架构设计
安全·node.js