node内存泄漏排查与修复过程

 更新时间:2024年06月19日 08:54:53   作者:Sir_苏  
之前开发了一个node接口,该接口使用canvas绘制产品图提供给java端使用,在运行了一段时间后发现了内存泄漏问题,本文浅记下修复过程,文章通过图文介绍的非常详细,需要的朋友可以参考下

前言

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

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

正文

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

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

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

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

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

node --inspect --heapsnapshot-signal=SIGUSR2 ./xxx.js

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

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

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

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

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

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

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

到此这篇关于node内存泄漏排查与修复过程的文章就介绍到这了,更多相关node内存泄漏内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Node.js常用三大模块之path模块

    Node.js常用三大模块之path模块

    在node.js中常用的三大模块中还有一个是path模块,主要是为了便利用户处理路径问题,如果我们在引入文件的时候经常会受到../和./的干扰,那么这个path模块将会很好的帮助你
    2022-09-09
  • Node.js实现文件上传

    Node.js实现文件上传

    这篇文章主要介绍了Node.js实现文件上传的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • node.js +mongdb实现登录功能

    node.js +mongdb实现登录功能

    这篇文章主要介绍了node.js +mongdb实现登录功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • nvm版本导致npm install报错Unexpected token '.'的解决办法

    nvm版本导致npm install报错Unexpected token '.'的解决办法

    最近做项目遇到npm install 的问题,下面这篇文章主要给大家介绍了关于nvm版本导致npm install报错Unexpected token '.'的解决办法,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • 图解NodeJS实现登录注册功能

    图解NodeJS实现登录注册功能

    这篇文章主要介绍了NodeJS实现登录注册功能,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • node.js中的fs.chownSync方法使用说明

    node.js中的fs.chownSync方法使用说明

    这篇文章主要介绍了node.js中的fs.chownSync方法使用说明,本文介绍了fs.chownSync的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • Node.js中http模块和导出共享问题

    Node.js中http模块和导出共享问题

    这篇文章主要介绍了Node.js中http模块和导出共享,通过 http 模块提供的 http.createServer() 方法,就能方便的把一台普通的电脑,变成一台 web 服务器,从而对外提供 web 资源服务,本文给大家详细讲解,需要的朋友可以参考下
    2022-10-10
  • node.js中Socket.IO的进阶使用技巧

    node.js中Socket.IO的进阶使用技巧

    这篇文章主要介绍了node.js中Socket.IO的进阶使用技巧,本文讲解了配置、房间、事件、授权等内容,需要的朋友可以参考下
    2014-11-11
  • node异步方法的异步调用与同步调用实现方法示例

    node异步方法的异步调用与同步调用实现方法示例

    这篇文章主要介绍了node异步方法的异步调用与同步调用实现方法,结合实例形式分析了node.js异步操作类的封装以及同步、异步两种调用方式,需要的朋友可以参考下
    2023-05-05
  • NodeJS学习笔记之Connect中间件模块(二)

    NodeJS学习笔记之Connect中间件模块(二)

    本文续上文的内容,介绍下nodejs中connect中间件的使用方式及用途,希望大家喜欢。
    2015-01-01

最新评论