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

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

发布网友 发布时间:2022-05-10 09:15

我来回答

1个回答

热心网友 时间:2022-04-22 15:29

一、定位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 中很少遇见。
如何定位 Node.js 的内存泄漏

而这个方案,是直接调用底层 V8 的方法,生成的快照只有 Node.js 环境中的对象。memwatch 这个可以在代码里直接使用,实时检测内存动态,当发生内存泄漏的时候,会触发 ‘leak’ 事件,会传递当前的堆状态,配合 heapdump 有奇效。二、定位问题:用 devTool 的可以忽略下面的过程:打开 Chrome Devtools ...

如何分析 Node.js 中的内存泄漏

还有一些其他的情况可能会导致内存泄漏,比如缓存。在使用缓存的时候,得清楚缓存的对象的多少,如果缓存对象非常多,得做限制最大缓存数量处理。还有就是非常占用 CPU 的代码也会导致内存泄漏,服务器在运行的时候,如果有高 CPU 的同步代码,因为Node.js 是单线程的,所以不能处理处理请求,请求堆积导致...

如何自己检查NodeJS的代码是否存在内存泄漏

npm模块node-heapdump是一个非凡的模块,它可以使用来将v8引擎的堆内存内容dump出来,这样你就可以在Chrome的开发者工具中查看问题。你可以在开发工具中对比不同运行阶段的堆内存快照,这样可以帮助你定位到内存泄漏的位置。要想了解heapdump的更多内容,可以阅读这篇文章 现在让我们来试试 heapdump,在每...

从零开始搞监控系统(4)——内存泄漏

通过仔细排查,我们最终发现代码中对外部 queue 对象反复注册 error 事件是导致内存泄漏的关键原因。删除相关代码后,内存使用情况恢复正常,问题得到解决。为确保系统性能优化的有效性,我们查阅了相关参考资料,包括 Node.js 内存管理和 V8 垃圾回收机制、Loadtest 库的使用、内存使用错误处理、JavaScript 内...

如何自己检查NodeJS的代码是否存在内存泄漏

我们需要做的是:跟踪所有的内存分配和交互引用以及内存释放。我们的源代码使用Visual C++写成,当然这种解决方法也可以很轻松的使用在别的C++代码里面。要做的第一件事情是重载new和delete操作符,它们将会在所有的代码中被使用到。我们在stdafx.h中,加入:ifdef _DEBUG inline void * __cdecl operator...

如何在Node.js中检测内存泄漏

node检测内存泄露条件模块memwatch npm install --save memwatch var memwatch = require('memwatch');memwatch.setup();memwatch.on('leak', function(info) { console.error('Memory leak detected: ', info);});

Node.js 应用故障排查手册 —— Node.js 性能平台使用指南

内存泄漏:收到 Node.js 应用进程堆内存超过阈值告警时,在控制台对应实例点击堆快照按钮,生成堆快照文件,分析堆空间占用情况,定位泄漏对象和代码段。核心转储:收到服务器生成核心转储文件告警时,将文件转储到云端,通过 AliNode 定制分析,查看 Node.js 应用 Crash 时刻的线程信息和错误堆栈信息,定位...

node扩展 memwatch分析

memwatch是一个C++扩展,主要用于检测Node.js中的内存泄漏问题。它的基本用法包括配置文件binding.gyp,以及src目录下的多个源文件如heapdiff.cc、init.cc、memwatch.cc、util.cc。这些文件通过node模块系统在编译过程中找到依赖的nan目录。memwatch的入口函数在init.cc文件中,通过`NODE_MODULE(memwatch, ...

什么是内存泄漏?

首先,你是如何申请的内存就如何释放,也就是说:Node* pNode = new Node;Node* arrNode = new Node[10];delete pNode;delete [] arrNode;//~ 堆管理器(应用程序的,也可以是系统的)会根据相应的记录删除你申请的内存 如果不显式释放从堆上申请的内存,那么在进程的整个生命期内,这块内存就...

node.jsjavascriptruntime内存占用太高如何处理?

处理Node.js和JavaScript运行时内存占用过高的策略主要有以下几个方面:首先,排查并解决内存泄漏问题。内存泄漏是指程序执行过程中,不再使用的内存没有被正确释放,导致内存占用逐渐增加。可通过使用内存分析工具如heapdump、memwatch等来检测内存泄漏。其次,优化代码,减少内存使用。在编程时,可以应用优化...

android内存泄露如何定位 内存泄漏如何定位 如何定位内存泄漏问题 js内存泄漏的解决方法 怎么定位java内存泄露 js内存泄漏情况 js内存泄漏问题 js如何释放闭包内存 linux内存泄露定位
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
饭店厨房如何解决 申请宣告婚姻无效原因是哪些 申请宣告婚姻的无效条件是什么 急求新乡去哪里玩可以玩一天,也可以去市里,有什么好的安排? 电视的遥控器失灵了怎么办? ...是:dmrgxsjvdkph。麻烦帮忙查询一下购买日期到期时间。 ...传5怎么开局?无敌开局方法一览介绍_金庸群侠传5怎么开局?无敌开局... ...5开局怎么刷潜能?金5刷潜能方法介绍_金庸群侠传5开局怎么刷潜能?金... 《金庸群侠传5》新人上手图文教程介绍_《金庸群侠传5》新人上手图文教程... 金庸群侠传5开局怎么玩最好介绍_金庸群侠传5开局怎么玩最好是什么 Android Studio的DDMS工具有哪些功能 初识机器学习算法有哪些 word 文档中的表格设置了“在各页顶端以标题形式重复出现”为什么不行 word里的表格设置了重复表头,可是换页后仍然无法重复,为什么 word里表格表头无法重复,我觉得跟页面设置有关,从第二页起,页眉的位置很奇怪 锦州市的银行卡在锦州市的所有城市都能补办吗 锦州农商银行在哪里 我办的是锦州银行的银行卡 微信钱包没有锦州银行 绑定不了怎么办 锦州天桥农村商业银行股份有限公司怎么样? 临床应用气体安全管理持续改错 安全管理都有哪些内容? 简述精神科安全管理的主要内容 微信转账显示存在欺诈行为,怎么消除? PPT动画:较大的图片进入后,由人详细讲解,讲解完毕后,单击是图片缩小到幻灯片固定位置 新装修好的房子洗澡间地漏不下水 自从华为更新后,用模拟器、云手机都登录不了华为账号了,该怎么弄啊 卫生间下水道 洗澡时水进不去??? 谁可以免费给我一个云手机的激活码吗?谢谢! 如何查询红手指授权码 对公问题,单位向我司打了一笔款,*没有开具给他,这笔对公的款可以不开*吗? 柯南之我懂兽语 爱情公寓经典台词有哪些啊 那里有好笑的笑话啊?? 棉纱的种类中英文对照 假毛是什么意思? 来几个搞笑的笑话,不好笑的帮个忙就别发了,谢谢了!!!朋友来几个!!! 一到十的短语笑话大全 谁能推荐个好的笑话杂志或者报纸,谢谢! 贴吧发帖或者回复怎么总是被删? 经济发展过于依赖出口有什么弊端? 补偿贸易的利弊 参加cctv3舞蹈世界栏目展示怎么报名? 我来回答 CCTV-3舞蹈世界什么时候播出? 求发展中国家80年代经济调整和改革的知识! 30分 快来答 我在北京 想学街舞。。 帮忙进来看看 汽车工业的发展给人带来的利弊有哪些? 星影艺考的戏剧影视表演班好不好? 中国政府的补贴体现在哪几个方面? 下周CCTV3的《舞蹈世界》什么时候播出?还有下周的CCTV3的节目单 求:.北京舞佳舞王子奇档案.