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 中令人困惑的变量赋值
Aug 13 Javascript
js简易namespace管理器 实例代码
Jun 21 Javascript
Extjs4实现两个GridPanel之间数据拖拽功能具体方法
Nov 21 Javascript
如何解决ligerUI布局时Center中的Tab高度大小
Nov 24 Javascript
JavaScript语言精粹经典实例(整理篇)
Jun 07 Javascript
jQuery窗口拖动功能的实现代码
Feb 04 Javascript
详解如何快速配置webpack多入口脚手架
Dec 28 Javascript
layui 选择列表,打勾,点击确定返回数据的例子
Sep 02 Javascript
详解Vue中CSS样式穿透问题
Sep 12 Javascript
微信小程序 点击切换样式scroll-view实现代码实例
Oct 11 Javascript
Vue实现数据请求拦截
Oct 23 Javascript
基于aotu.js实现微信自动添加通讯录中的联系人功能
May 28 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
一个很方便的 XML 类!!原创的噢
2006/10/09 PHP
php函数与传递参数实例分析
2014/11/15 PHP
php实现图片等比例缩放代码
2015/07/23 PHP
非常重要的php正则表达式详解
2016/01/04 PHP
php版微信公众平台开发之验证步骤实例详解
2016/09/23 PHP
详解PHP 二维数组排序保持键名不变
2019/03/06 PHP
PHP面向对象程序设计__tostring()和__invoke()用法分析
2019/06/12 PHP
用js实现的模拟jquery的animate自定义动画(2.5K)
2010/07/20 Javascript
深入浅析Node环境和浏览器的区别
2018/08/14 Javascript
JavaScript实现的拼图算法分析
2019/02/13 Javascript
用webpack4开发小程序的实现方法
2019/06/04 Javascript
微信小程序实现横向滚动导航栏效果
2019/12/12 Javascript
python中的代码编码格式转换问题
2015/06/10 Python
Python中with及contextlib的用法详解
2017/06/08 Python
Python代码打开本地.mp4格式文件的方法
2019/01/03 Python
Mac 使用python3的matplot画图不显示的解决
2019/11/23 Python
flask框架json数据的拿取和返回操作示例
2019/11/28 Python
Python中bisect的使用方法
2019/12/31 Python
浅谈Python中threading join和setDaemon用法及区别说明
2020/05/02 Python
深入浅析Python代码规范性检测
2020/07/31 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
2020/11/25 Python
Pycharm自动添加文件头注释和函数注释参数的方法
2020/10/23 Python
Python基于Socket实现简易多人聊天室的示例代码
2020/11/29 Python
Tech21美国/加拿大:英国NO.1防摔保护壳品牌
2018/01/20 全球购物
英国假睫毛购买网站:FalseEyelashes.co.uk
2018/05/23 全球购物
Guess荷兰官网:美国服饰品牌
2020/01/22 全球购物
我的动漫时代的创业计划书范文
2014/01/27 职场文书
数控技术学生的自我评价
2014/02/15 职场文书
护理中职生求职信范文
2014/02/24 职场文书
产品质量承诺范本
2014/03/31 职场文书
乡镇干部个人对照检查材料思想汇报(原创篇)
2014/09/28 职场文书
乡镇干部个人对照检查材料思想汇报
2014/10/04 职场文书
2015年度校学生会工作总结报告
2015/05/23 职场文书
python3 删除所有自定义变量的操作
2021/04/08 Python
SpringBoot实现quartz定时任务可视化管理功能
2021/08/30 Java/Android
HTML5页面打开微信小程序功能实现
2022/09/23 HTML / CSS