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 相关文章推荐
索趣科技的答案
Feb 07 Javascript
javascript之对系统的toFixed()方法的修正
May 08 Javascript
Javascript创建自定义对象 创建Object实例添加属性和方法
Jun 04 Javascript
JavaScript中this的9种应用场景及三种复合应用场景
Sep 12 Javascript
jQuery实现简单滚动动画效果
Apr 07 Javascript
javascript 面向对象实战思想分享
Sep 07 Javascript
vue 自定义指令自动获取文本框焦点的方法
Aug 25 Javascript
JavaScript fetch接口案例解析
Aug 30 Javascript
JavaScript中this用法学习笔记
Mar 17 Javascript
自定义Vue中的v-module双向绑定的实现
Apr 17 Javascript
vue3实现v-model原理详解
Oct 09 Javascript
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
Mar 20 jQuery
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
全国FM电台频率大全 - 15 山东省
2020/03/11 无线电
让你同时上传 1000 个文件 (二)
2006/10/09 PHP
php下实现折线图效果的代码
2007/04/28 PHP
php AJAX实例根据邮编自动完成地址信息
2008/11/23 PHP
php使用COPY函数更新配置文件的方法
2015/06/18 PHP
浅谈JavaScript中定义变量时有无var声明的区别
2014/08/18 Javascript
ajax读取数据后使用jqchart显示图表的方法
2015/06/10 Javascript
JavaScript学习笔记之创建对象
2016/03/25 Javascript
AngularJS 所有版本下载地址
2016/09/14 Javascript
js转html实体的方法
2016/09/27 Javascript
小程序开发实战:实现九宫格界面的导航的代码实现
2017/01/19 Javascript
滚动条的监听与内容随着滚动条动态加载的实现
2017/02/08 Javascript
Vue2路由动画效果的实现代码
2017/07/10 Javascript
微信小程序实现自定义modal弹窗封装的方法
2018/06/15 Javascript
探秘vue-rx 2.0(推荐)
2018/09/21 Javascript
JS实现的点击按钮图片上下滚动效果示例
2019/01/28 Javascript
解决vue 子组件修改父组件传来的props值报错问题
2019/11/09 Javascript
jQuery实现异步上传一个或多个文件
2020/08/17 jQuery
vue实现移动端input上传视频、音频
2020/08/18 Javascript
[03:58]2014DOTA2国际邀请赛 龙宝赛后解密DK获胜之道
2014/07/14 DOTA
浅谈Python中chr、unichr、ord字符函数之间的对比
2016/06/16 Python
Python3实现获取图片文字里中文的方法分析
2018/12/13 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available
2019/07/31 Python
详解用Python为直方图绘制拟合曲线的两种方法
2019/08/21 Python
python根据文本生成词云图代码实例
2019/11/15 Python
解决os.path.isdir() 判断文件夹却返回false的问题
2019/11/29 Python
ALDI奥乐齐官方海外旗舰店:德国百年超市
2017/12/27 全球购物
.NET常见笔试题集
2012/12/01 面试题
开办饭店创业计划书
2013/12/28 职场文书
工艺工程师岗位职责
2014/03/04 职场文书
张丽莉观后感
2015/06/16 职场文书
导游词之沈阳清昭陵
2019/12/28 职场文书
实战Python爬虫爬取酷我音乐
2022/04/11 Python
Redis如何实现验证码发送 以及限制每日发送次数
2022/04/18 Redis
使用Mysql计算地址的经纬度距离和实时位置信息
2022/04/29 MySQL