zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    VS1053 datasheet 解读笔记
    C# List Find方法
    git push & git pull 推送/拉取指定分支
    Python 匿名函数
    Python 函数
    java jdk安装与环境变量配置
    Anroid开发环境配置
    Asponse.Cell操作Excel
    C#调试DeBug
    Ext.gridPanel中内容对齐
  • 原文地址:https://www.cnblogs.com/mengff/p/12960492.html
Copyright © 2011-2022 走看看