问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何定位 Node.js 的内存泄漏

发布网友 发布时间:2022-04-21 18:09

我来回答

1个回答

热心网友 时间:2023-10-07 03:38

一、定位node.js内存漏洞的工具:
工欲善其事必先利其器,在排查时,我们还是需要一些工具来帮忙的。
devTool
这个是今年初出的 Node.js 调试工具,基于 Electron 将 Node.js 和 Chromium 的功能融合在了一起。操作起来比 node-inspector 方便,开放的 Timeline 功能还是比较实用的,虽然不是实时显示。
仅需要 devtool xxx.js,还可以通过 .devtoolrc 来进行参数定制,具体见 GitHub
heapmp + chrome devTool
这个是比较传统的定位内存泄漏的组合。heapmp 可以直接在代码中调用生成内存快照,然后将快照文件导入到 chrome devTool 进行分析,之后操作其实和前者就差不多了。不过,这个方案和前者有一点区别就是,前者实际还是在浏览器环境中,所以生成的内存快照会有一些 DOM 对象的存在,会有一定的干扰。而这个方案,是直接调用底层 V8 的方法,生成的快照只有 Node.js 环境中的对象。
memwatch
这个可以在代码里直接使用,实时检测内存动态,当发生内存泄漏的时候,会触发 ‘leak’ 事件,会传递当前的堆状态,配合 heapmp 有奇效。
二、定位问题:
用 devTool 的可以忽略下面的过程:
打开 Chrome Devtools ,进入到 Profiles 选项卡,点 Load 按钮,加载之前生成的快照。
对于内存快照,有四个视图,Summary,Comparison,Containment,Statistics,这里面常用的是前三个。
在 Summary 视图中,我们可以看到当前快照的全部信息,以及多个快照之间的信息。在列表里显示的都是对象的构造函数名字,可以先忽略被括号包裹的对象,优先观察其他的对象,最后再来看他们。后面的 shallow size 表示的是对象自身的大小,retained size 表示的是对象和它依赖对象的大小,一般是 GC 不可达的。
在 Comparison 视图中,我们可以进行多个快照之间的对比,这个用处比较大,如果我们将前两次快照进行对比,可能比较快速的定位出问题的对象。注意观察 New、Deleted、Delta,如果是内存泄漏的对象,可能是一直在 New,而没有 Deleted。
在 Containment 视图中,我们可以查看整个 GC 路径,当然一般不会用到。因为展开在 Summary 和 Comparison 列举的每一项,都可以看到从 GC roots 到这个对象的路径。通过这些路径,你可以看到这个对象的句柄被什么持有,从而定位问题产生的原因。值的注意的是,其中背景色*的,表示这个对象在 Javascript 中还存在引用,所以可能没有被清除。如果是红色的,表示的是这个对象在 Javascript 中不存在引用,但是依然存活在内存中,一般常见于 DOM 对象,它们存放的位置和 Javascript 中对象还是有不同的,在 Node.js 中很少遇见。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
电动工具有哪些牌子 充电钻有多少牌子好 充电电钻有哪些品牌 充电手电钻有哪些品牌 F1 2011回音爆音 Rapture3D是什么软件? rapture3d是什么? rapture3d ...可以从手机里下电脑单机游戏吗? 可以的话怎么弄。 我这边最近风太大,家里这个旧的燃气热水器不敢用了….有没有防风的型号... VC6.0内存泄漏怎么修复 C++内存泄漏,编译通过 ,运行出错,请问怎么改代码 win10内存泄漏,有没有必要重装系统 C++实现ArrayList数组,内存泄漏 求助服务器崩溃原因和解决方法 为什么lua语言中使用全局变量就会造成内存泄漏呢?? Win8系统内存泄露的问题如何修复 创建mesh,为什么会提示有内存泄漏 C++如何检测内存泄漏 菜鸟求助,Analyze分析出内存泄漏 jquery.data为什么可以避免内存泄露?内存泄露是怎... 如何处理.NET中的内存泄露 如何检查内存泄露问题 内存泄漏有哪些 武汉有什么景点值得去 武汉必游景点是哪里?为什么武汉的本地人很少去呢? 去武汉旅游,去哪里比较好 冬季适合旅游的城市? 现在去武汉要到哪里玩比较好呢 武汉有哪些适合学生去旅行的地方? 桌面窗口管理器占用内存爆表,看了网上的解答后更... 用平板电脑看腾讯视频的美剧,怎么去掉中英文字幕呢 谁知道在电脑上qq视频怎么弄画面特效 电脑看腾讯视频画面很卡 为啥我电脑的腾讯视频打开了 就和装系统的画质一样... 苹果电脑怎么下腾讯视频? 电脑桌面的腾讯影视库是什么 笔记本电脑用腾讯视频后,桌面为什么会出现个腾讯... 拖把是在洗脸池里洗吗 在哪洗拖把 拖把很脏,洗衣槽附近有没有必要弄一个专门洗拖把... 拖把怎么清洗才干净 win7系统如何显示隐藏文件夹 win7系统隐藏的文件夹怎么显示出来 win7如何显示被隐藏的文件夹 手机喇叭进水了,声音变得刺啦刺啦的,应该怎么办? win7怎么显示隐藏文件 win7怎么把隐藏的文件显示出来 win7隐藏文件怎么显示 win7怎样显示隐藏文件