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 相关文章推荐
window.onload 加载完毕的问题及解决方案(上)
Jul 09 Javascript
Javascript和Java获取各种form表单信息的简单实例
Feb 14 Javascript
jquery插件之定时查询待处理任务数量
May 01 Javascript
javascript实现带节日和农历的日历特效
Feb 01 Javascript
JS实现转动随机数抽奖特效代码
Apr 16 Javascript
javascript封装 Cookie 应用接口
Aug 07 Javascript
JS中对象与字符串的互相转换详解
May 20 Javascript
详解JavaScript中|单竖杠运算符的使用方法
May 23 Javascript
JavaScript的this关键字的理解
Jun 18 Javascript
React-Native左右联动List的示例代码
Sep 21 Javascript
vue+SSM实现验证码功能
Dec 07 Javascript
Vue formData实现图片上传
Aug 20 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中array_map与array_column之间的关系分析
2014/08/19 PHP
php使用Jpgraph绘制3D饼状图的方法
2015/06/10 PHP
PHP PDOStatement::columnCount讲解
2019/01/30 PHP
php fread函数使用方法总结
2019/05/28 PHP
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
2006/12/23 Javascript
为调试JavaScript添加输出窗口的代码
2010/02/07 Javascript
分享20款好玩的jQuery游戏
2011/04/17 Javascript
JS获取鼠标坐标的实例方法
2013/07/18 Javascript
javascript动态的改变IFrame的高度实现自动伸展
2013/10/12 Javascript
node.js中的buffer.fill方法使用说明
2014/12/14 Javascript
jQuery EasyUI之DataGrid使用实例详解
2016/01/04 Javascript
Bootstrap入门书籍之(三)栅格系统
2016/02/17 Javascript
如何使用jquery实现文字上下滚动效果
2016/10/12 Javascript
jq checkbox 的全选并ajax传参的实例
2017/04/01 Javascript
JavaScript实现多重继承的方法分析
2018/01/09 Javascript
Vue.js自定义事件的表单输入组件方法
2018/03/08 Javascript
vue.js 底部导航栏 一级路由显示 子路由不显示的解决方法
2018/03/09 Javascript
JavaScript实现电灯开关小案例
2020/03/30 Javascript
对Python中for复合语句的使用示例讲解
2018/11/01 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
2019/02/01 Python
深入理解Python异常处理的哲学
2019/02/01 Python
python-django中的APPEND_SLASH实现方法
2019/06/21 Python
django获取from表单multiple-select的value和id的方法
2019/07/19 Python
python实现图片上添加图片
2019/11/26 Python
django使用graphql的实例
2020/09/02 Python
只要五步 就可以用HTML5/CSS3快速制作便签贴特效(图)
2012/06/04 HTML / CSS
百联网上商城:i百联
2017/01/28 全球购物
加拿大女包品牌:Matt & Nat
2017/05/12 全球购物
世界领先的高品质定制产品平台:Zazzle
2017/07/23 全球购物
补充协议书范本
2014/04/23 职场文书
祖国在我心中演讲稿500字
2014/05/04 职场文书
小学爱国卫生月活动总结
2014/06/30 职场文书
好的促销活动方案
2014/08/21 职场文书
2014年妇委会工作总结
2014/12/10 职场文书
大学生个人学年总结
2015/02/15 职场文书
TV动画《八十龟酱观察日记》第四季宣传PV公布
2022/04/06 日漫