angular4 JavaScript内存溢出问题


Posted in Javascript onMarch 06, 2018

最近在写基于angular4的项目的时候,在build --prod的时候,突然措手不及的蹦出个报错,大致错误如下:

70% building modules 1345/1345 modules 0 active
<--- Last few GCs --->
ms: Mark-sweep 703.9 (837.9) -> 701.4 (811.9) MB, 331.3 / 0 ms [allocation failure] [GC in old space requested].
ms: Mark-sweep 701.4 (811.9) -> 701.4 (790.9) MB, 350.5 / 0 ms [allocation failure] [GC in old space requested].
ms: Mark-sweep 701.4 (790.9) -> 698.0 (760.9) MB, 433.7 / 0 ms [last resort gc].
ms: Mark-sweep 698.0 (760.9) -> 692.7 (751.9) MB, 328.7 / 0 ms [last resort gc].


<--- JS stacktrace --->

==== JS stack trace =========================================

Security context: 00000298510373A9 <JS Object>
  1: /* anonymous */(aka /* anonymous */) [D:\dev\cobalt_wp\node_modules\webpack\lib\FlagDependencyExportsPlugin.js:77] [pc=0000026F721B51D6] (this=0000029851004131 <undefined>,dep=00000150FC6162C9 <a NormalModule with map 0000025741730C01>)
  2: arguments adaptor frame: 3->1
  3: InnerArrayForEach(aka InnerArrayForEach) [native array.js:~924] [pc=0000026F71EE3DCD] (this=000002985100413...

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory

注:这里的代码并不是我的真实报错代码,编译时间太长,忘记截取了,大致的错误基本一样,如果你遇到了相同的问题,恭喜了,往下看能找到答案!

当时我是蒙圈了,一直都编译的挺好,怎么突然就溢出了呢?

可能的原因有如下:

1.angular4 在编译的时候,对CPU和内存的需求比较大,当文件数量很多的时候,可能会出现内存不足的情况(有可能);

2.当代码出现大量大数据的循环或者死循环(sever阶段并没有出现溢出,这个概率应该不大);

3.angular订阅的数据在 ngOnDestroy 阶段没有被销毁,造成大量数据占用内存(有可能)

目前没有查到具体是什么原因造成的,哪位大神知道的,请不吝赐教,谢谢!

解决这个问题的过程很波折,这里就不说了,你们估计也不想知道,下面说一下解决方案吧:

核心思路是运用v8引擎的旧属性: --max_old_space_size 来修改内存上线,至于这个属性在哪里设,就是一个磨人的小妖精了!

修改目录:  my-project/node_modules/.bin  找到 ng.cmd :

@IF EXIST "%~dp0\node.exe" (
 "%~dp0\node.exe" --max_old_space_size=8192 "%~dp0\..\._@angular_cli@1.0.0@@angular\cli\bin\ng" %*
) ELSE (
 @SETLOCAL
 @SET PATHEXT=%PATHEXT:;.JS;=;%
 node --max_old_space_size=8192 "%~dp0\..\._@angular_cli@1.0.0@@angular\cli\bin\ng" %*
)

修改目录: my-project/node_modules/.bin  找到 ngc.cmd :

@IF EXIST "%~dp0\node.exe" (
 "%~dp0\node.exe" --max_old_space_size=8192 "%~dp0\..\._@angular_compiler-cli@4.0.1@@angular\compiler-cli\src\main.js" %*
) ELSE (
 @SETLOCAL
 @SET PATHEXT=%PATHEXT:;.JS;=;%
 node --max_old_space_size=8192 "%~dp0\..\._@angular_compiler-cli@4.0.1@@angular\compiler-cli\src\main.js" %*
)

看到里面的--max_old_space_size设置了吗? 至于数字设多少,你们自己看着办吧,我的项目比较大,设个大点的值,以防不测,哈哈!

然后执行 ng build --prod ,你以为这样就行了吗?这才是关键的地方!

本人亲测,如上设置,再执行编译依然会报内存溢出,貌似并没什么卵用!把当前目录切换到 my-project/node_modules/.bin 然后再执行 ng build --prod , 世界一下子就和平了! 本人亲测有效,收好不谢!

如果你想问,为什么不加 --aot , 这个就留个你自己先想想吧!

好了,忙里抽闲,分享一下这个大坑的填坑方法, 希望对大家有用!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 全等号运算符使用说明
May 31 Javascript
EditPlus注册码生成器(js代码实现)
Mar 25 Javascript
xmlhttp缓存清除的2种解决方法
Dec 13 Javascript
javascript的解析执行顺序在各个浏览器中的不同
Mar 17 Javascript
基于socket.io和node.js搭建即时通信系统
Jul 30 Javascript
JavaScrip常见的一些算法总结
Dec 28 Javascript
javascript基本算法汇总
Mar 09 Javascript
有关easyui-layout中的收缩层无法显示标题的解决办法
May 10 Javascript
微信小程序 swiper组件轮播图详解及实例
Nov 16 Javascript
清除输入框内的空格
Dec 21 Javascript
javascript循环链表之约瑟夫环的实现方法
Jan 16 Javascript
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
Nov 21 Javascript
webpack+vuex+axios 跨域请求数据的示例代码
Mar 06 #Javascript
vue中本地静态图片路径写法
Mar 06 #Javascript
webpack配置导致字体图标无法显示的解决方法
Mar 06 #Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
Mar 06 #Javascript
React BootStrap用户体验框架快速上手
Mar 06 #Javascript
基于vue打包后字体和图片资源失效问题的解决方法
Mar 06 #Javascript
详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
Mar 06 #Javascript
You might like
分页详解 从此分页无忧(PHP+mysql)
2007/11/23 PHP
用PHP为SHOPEX增加日志功能代码
2010/07/02 PHP
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
ThinkPHP的I方法使用详解
2014/06/18 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
2019/02/15 PHP
Javascript的构造函数和constructor属性
2010/01/09 Javascript
jQuery调用AJAX时Get和post公用的乱码解决方法实例说明
2013/06/04 Javascript
js中apply方法的使用详细解析
2013/11/04 Javascript
js hover 定时器(实例代码)
2013/11/12 Javascript
JavaScript数据库TaffyDB用法实例分析
2015/07/27 Javascript
高性能JavaScript循环语句和条件语句
2016/01/20 Javascript
详解Javacript和AngularJS中的Promises
2016/02/09 Javascript
JS实现回到页面顶部动画效果的简单实例
2016/05/24 Javascript
JavaScript sort数组排序方法和自我实现排序方法小结
2016/06/06 Javascript
详解Angular 4.x Injector
2017/05/04 Javascript
jQuery查找dom的几种方法效率详解
2017/05/17 jQuery
深入掌握 react的 setState的工作机制
2017/09/27 Javascript
Angular 5.0 来了! 有这些大变化
2017/11/15 Javascript
JavaScript实现点击出现图片并统计点击次数功能示例
2018/07/23 Javascript
vue2.0 路由模式mode=&quot;history&quot;的作用
2018/10/18 Javascript
如何在Vue.js中实现标签页组件详解
2019/01/02 Javascript
Vue.directive 实现元素scroll逻辑复用
2019/11/29 Javascript
Echarts.js无法引入问题解决方案
2020/10/30 Javascript
[54:27]TNC vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python中多线程及程序锁浅析
2015/01/21 Python
python排序方法实例分析
2015/04/30 Python
英国领先的鞋类零售商:Shoe Zone
2018/12/13 全球购物
HEMA法国:荷兰原创设计
2019/02/21 全球购物
Otiumberg官网:英国半精致珠宝品牌
2021/01/16 全球购物
园林设计师自荐信
2013/11/18 职场文书
化验室技术员岗位职责
2013/12/24 职场文书
一年级学生评语
2014/04/23 职场文书
预备党员综合考察材料
2014/05/31 职场文书
社区四风存在问题及整改措施
2014/10/26 职场文书
部门经理迟到检讨书
2015/02/16 职场文书
python中出现invalid syntax报错的几种原因分析
2022/02/12 Python