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 相关文章推荐
Packer 3.0 JS压缩及混淆工具 下载
May 03 Javascript
Jquery Ajax学习实例5 向WebService发出请求,返回泛型集合数据的异步调用
Mar 17 Javascript
Js数组的操作push,pop,shift,unshift等方法详细介绍
Dec 28 Javascript
深入理解JavaScript系列(41):设计模式之模板方法详解
Mar 04 Javascript
Javascript中String的常用方法实例分析
Jun 13 Javascript
移动Web中图片自适应的两种JavaScript解决方法
Jun 18 Javascript
js正则表达式注册页面表单验证
Oct 11 Javascript
JavaScript 巧学巧用
May 23 Javascript
JS实现图片转换成base64的各种应用场景实例分析
Jun 22 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
Aug 10 Javascript
JavaScript实现邮箱后缀提示功能的示例代码
Dec 13 Javascript
Vue动态组件和异步组件原理详解
May 06 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
一个从别的网站抓取信息的例子(域名查询)
2006/10/09 PHP
PHP同时连接多个mysql数据库示例代码
2014/03/17 PHP
php去除换行(回车换行)的三种方法
2014/03/26 PHP
PHP使用strtotime计算两个给定日期之间天数的方法
2015/03/18 PHP
PHP实现查询手机归属地的方法详解
2017/04/28 PHP
体验js中splice()的强大(插入、删除或替换数组的元素)
2013/01/16 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
详解AngularJS中的表达式使用
2015/06/16 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
2015/09/01 Javascript
分享一个原生的JavaScript拖动方法
2016/09/25 Javascript
jquery中用jsonp实现搜索框功能
2016/10/18 Javascript
JavaScript prototype属性详解
2016/10/25 Javascript
BootStrap tooltip提示框使用小结
2016/10/26 Javascript
常用的几个JQuery代码片段
2017/03/13 Javascript
[02:05]DOTA2完美大师赛趣味视频之看我表演
2017/11/18 DOTA
Python 模板引擎的注入问题分析
2017/01/01 Python
老生常谈python函数参数的区别(必看篇)
2017/05/29 Python
浅谈Python中的私有变量
2018/02/28 Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
2019/04/11 Python
Window10下python3.7 安装与卸载教程图解
2019/09/30 Python
AUC计算方法与Python实现代码
2020/02/28 Python
对Matlab中共轭、转置和共轭装置的区别说明
2020/05/11 Python
python 模拟登录B站的示例代码
2020/12/15 Python
CSS3 Columns分列式布局方法简介
2014/05/03 HTML / CSS
巴西宠物商店:Cobasi
2019/04/19 全球购物
意大利顶级奢侈品电商:LUISAVIAROMA(支持中文)
2020/05/26 全球购物
Linux面试经常问的文件系统操作命令
2015/11/05 面试题
为什么要用EJB
2014/04/17 面试题
shell的种类有哪些
2015/04/15 面试题
关于母亲节的感言
2014/02/04 职场文书
《阳光》教学反思
2014/02/23 职场文书
初中英语课后反思
2014/04/25 职场文书
大型演出策划方案
2014/05/28 职场文书
2019年教师节活动策划方案
2019/09/09 职场文书
使用Django实现商城验证码模块的方法
2021/06/01 Python
Python实现生活常识解答机器人
2021/06/28 Python