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

JavaScript038

如何定位Node.js的内存泄漏,第1张

一、定位node.js内存漏洞的工具:

工欲善其事必先利其器,在排查时,我们还是需要一些工具来帮忙的。

devTool

这个是今年初出的 Node.js 调试工具,基于 Electron 将 Node.js 和 Chromium 的功能融合在了一起。操作起来比 node-inspector 方便,开放的 Timeline 功能还是比较实用的,虽然不是实时显示。

仅需要 devtool xxx.js,还可以通过 .devtoolrc 来进行参数定制,具体见 GitHub

heapdump + chrome devTool

这个是比较传统的定位内存泄漏的组合。heapdump 可以直接在代码中调用生成内存快照,然后将快照文件导入到 chrome devTool 进行分析,之后操作其实和前者就差不多了。不过,这个方案和前者有一点区别就是,前者实际还是在浏览器环境中,所以生成的内存快照会有一些 DOM 对象的存在,会有一定的干扰。而这个方案,是直接调用底层 V8 的方法,生成的快照只有 Node.js 环境中的对象。

memwatch

这个可以在代码里直接使用,实时检测内存动态,当发生内存泄漏的时候,会触发 ‘leak’ 事件,会传递当前的堆状态,配合 heapdump 有奇效。

二、定位问题:

用 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 中很少遇见。

解决webpack打包、编译、热更新Node内存不足问题_node内存不够_Vgb...

既然知道了问题所在,那么就好解决了,面向百度编程,百度搜索如何解决Node运行内存不足的问题马上就有了解决办法,increase-memory-limit可以提高Node占用内存。npm i -g increase-memory-limit安装包,然后在项目目录执行increase-memory-limit,...

继续访问

node打包内存不足问题解决方式:Allocation failed - JavaScript heap out...

直接在node后面写上--max_old_space_size=4096就好了,我这里设置的内存大小是4G,这个具体的大小可以根据自己的项目情况来设置就好了。然后再重新运行npm run build就可以正常打包构建了。

继续访问

gulp-htmlparser:使用 gulp 将 html 解析为 js 对象

#gulp-htmlparser 插件解析HTML用 包裹 gulp-htmlparser 描述 使用 gulp 将 html 解析为 js 对象 节点版本 >= 0.9 吞咽版 3.x 用法 安装 npm install gulp-htmlparser --save ##例子 var gulp = require ( 'gulp' ) var gparser = require ( 'gulp-htmlparser' ) gulp . task ( 'task' , function ( ) { gulp . src ( 'normal.html' ) . pipe ( gparser ( ) ) . pipe ( gulp . dest ( './' ) ) } ) gulp . task ( 'default' , 'task' )

node 内存 溢出 插件

版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。 现象描述 昨天用webpack打包Vue的项目时,node内存溢出而停止build项目,即是项目构建过程中频繁报内存溢出:FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory。并且打包速度相当慢...

继续访问

npm命令运行时报错_npm命令报错整理_我自来去的博客

二. 内存溢出内存不足 描述 远程连接win32位的服务器 在项目目录下执行打包命令 npm run build 报以上错误内容 内存溢出 内存不足 解决一 修改package.json中的内存大小 修改package.json文件中size的大小,然后重新执行打包命令 ...

继续访问

vscode执行npm时的一些错误及处理_蓝色格子的博客

这个原因是JavaScript堆内存不足。 FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory 1 2.2、解决 通过安装increase-memory-limit插件。命令:npm install -g increase-memory-lim...

继续访问

前端项目打包出现JavaScript堆内存不足、启动也会内存溢出解决办法\increase-memory-limit‘ 不是内部或外部命令,

打包出现JavaScript堆内存不足 最近打包遇到这种报错 Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory 以及 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 解决方法如下: 1.从网上搜索的资料试了一下,不大好用,不过也照做了 修改 package

继续访问

最新发布 npm 打包报错JavaScript heap out of memory(亲测可行)

npm 打包报错JavaScript heap out of memory(亲测可行)

继续访问

npm运行项目提示JavaScript heap out of memory(堆栈内存溢出问题)解决方案

1、堆栈内存溢出问题 npm ERR! code ELIFECYCLE npm ERR! errno 134 npm ERR! king-tech-front-frame@1.0.0 dev: `vue-cli-service serve` npm ERR! Exit status 134 npm ERR! npm ERR! Failed at the king-tech-front-frame@1.0.0 dev script. npm ERR! This is probably not a proble

继续访问

npm执行报内存溢出,内存不够很使用

您需要增加节点允许的内存量。 您可以通过以下方式在全局范围内执 打开一个cmd窗口 跑 setx NODE_OPTIONS --max_old_space_size=10240 针对本地调试使用。 关闭所有cmd /代码编辑器 重新打开cmd并再次运行节点命令(npm等) ...

继续访问

npm 执行中遇到的问题

ubuntu@ip-10-200-100-47:~/pinpoint-backend$ npm run build >pinpoint-backend@0.0.1 prebuild /home/ubuntu/pinpoint-backend >rimraf dist >pinpoint-backend@0.0.1 build /home/ubuntu/pinpoint-b...

继续访问

vue3+vite+ts打包时遇到的问题以及“优化”,JavaScript heap out of memory(错误:内存不足)等

如果用了element plus可能打包会出现这个报错。在tsconfig.json里加这代码就行。vue3+vite+ts打包时报错。

继续访问

npm run dev/build内存溢出解决方法,亲测有效(JavaScript heap out of memory)

npm run dev内存溢出解决方案

继续访问

vue项目运行时报内存溢出:JavaScript heap out of memory

原文链接:https://blog.csdn.net/u014028247/article/details/120198702 ==== JS stack trace ========================================= 0: ExitFrame [pc: 000002AACBF079E0] Security context: 0x00b4d151e6e9 <JSObject>1: byteLength(aka byteLength) [00

继续访问

gulp html 缓存,gulp解决浏览器缓存问题

给请求的文件加上唯一的版本号,这样浏览器就会加载新文件,防止因缓存产生的问题。下面是用gulp-rev生成md5签名,构建好的文件名会加上md5签名,同时生成一个json用来保存文件名路径对应关系。安装插件npminstall--save-devgulpnpminstall--save-devgulp-revnpminstall--save-devgulp-rev-collect...

继续访问

npm run build 报错 JavaScript heap out of memory &node -- max-old-space-size=4096不是内部或外部命令

npm run build 报错 JavaScript heap out of memory node -- max-old-space-size=4096不是内部或外部命令

继续访问

nodejs运行时 内存不足解决方案

找到nodejs运行配置文件目录 window下目录位置 C:\Users\39716(用户名)\AppData\Roaming\npm 找到内存不足发生的环境比如 webpack 打开webpack.cmd 添加 --max_old_space_size=4096 @IF EXIST "%~dp0\node.exe" ( "%~dp0\node.exe" "%~dp0\n...

继续访问

JS stacktrace--解决运行npm run serve 后报错,node内存溢出问题

拉去vue项目,运行npm run serve 后,报错如下 <--- JS stacktrace --->==== JS stack trace ========================================= 0: ExitFrame [pc: 0000002919A5C5C1] Security context: 0x02b9c119e6e9 <JSObject>1: _send [0000016FEC87BBF1] [intern

继续访问

node:内存溢出(报错:CALL_AND_RETRY_LAST分配失败-JavaScript堆内存不足)

描述:项目运行npm run dev 运行一定次数(我这里只能保存一次,第二次保存就报错,需要重新运行npm run dev,很耗费时间)后报错 报错:CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 翻译:CALL_AND_RETRY_LAST分配失败-JavaScript堆内存不足 进过各种搜索,找到关于问题的解决方法—node内存溢出 解决方法: CMD,进入命令行 复制粘贴命令:setx NODE_OPTION

继续访问

npm run build打包提示heap out of memory

npm打包报 heap out of memory的解决办法。

继续访问

运行npm start报错堆内存不足

报错 解决: "scripts": { "start": "node --max-old-space-size=4096 dev.js", "build": "webpack --progress --profile --colors --config webpack.prod.config.js", "test": "echo \"Error: no test...

继续访问

node内存溢出(报错:CALL_AND_RETRY_LAST分配失败-JavaScript堆内存不足)

描述:项目运行npm run dev 运行一定次数(我这里只能保存一次,第二次保存就报错,需要重新运行npm run dev,很耗费时间)后报错 报错:CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 翻译:CALL_AND_RETRY_LAST分配失败-JavaScript堆内存不足 进过各种搜索,找到关于...

继续访问

热门推荐 执行 npm 命令时报错:Allocation failed - JavaScript heap out of memory

执行 npm 命令时报错: FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory 原因是 JavaScript堆内存不足,Node 是基于V8引擎,在 Node 中通过 JavaScript 使用内存时只能使用部分内存(64位系统下约为1.4 GB),如果内存不足,可以用下面方法来放宽V8默认的内存限制。 法一:添加参数--max_old_spa.

继续访问

npm 报错内存不足

node.js

javascript属于脚本语言,用浏览器内置的脚本解释器来执行,有自动释放内存和垃圾处理的机制. 暂时不能通过手动来回收和处理内存信息.

ajax自动刷新一般情况下是不会占用太大内存的,你检查你的代码是不是写入了死循环,或是写入了暂用内存比较大的变量!