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中的传值与传引用
Dec 09 Javascript
JS的encodeURI和java的URLDecoder.decode使用介绍
May 08 Javascript
JavaScript中匿名、命名函数的性能测试
Sep 04 Javascript
jQuery的text()方法用法分析
Dec 20 Javascript
使用javascript实现简单的选项卡切换
Jan 09 Javascript
纯js实现仿QQ邮箱弹出确认框
Apr 29 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
Sep 24 Javascript
jQuery遮罩层实现方法实例详解(附遮罩层插件)
Dec 08 Javascript
Angular2使用Augury来调试Angular2程序
May 21 Javascript
vue-resource + json-server模拟数据的方法
Nov 02 Javascript
使用vue如何构建一个自动建站项目
Feb 05 Javascript
Vue项目环境搭建详细总结
Sep 26 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
dedecms中常见问题修改方法总结
2007/03/21 PHP
收集的PHP中与数组相关的函数
2007/03/22 PHP
PHP 读取Postgresql中的数组
2013/04/14 PHP
使用dump函数,给php加断点测试
2013/06/25 PHP
PHP随机生成唯一HASH值自定义函数
2015/04/20 PHP
php中各种定义变量的方法小结
2017/10/18 PHP
BOOM vs RR BO5 第二场 2.14
2021/03/10 DOTA
学习js所必须要知道的一些
2007/03/07 Javascript
Mootools 1.2教程 选项卡效果(Tabs)
2009/09/15 Javascript
jQueryUI如何自定义组件实现代码
2010/11/14 Javascript
浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法
2014/01/10 Javascript
js导航栏单击事件背景变换示例代码
2014/01/13 Javascript
JavaScript开发人员的10个关键习惯小结
2014/12/05 Javascript
js实现绿白相间竖向网页百叶窗动画切换效果
2015/03/02 Javascript
js结合正则实现国内手机号段校验
2015/06/19 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
2019/09/05 Javascript
nodejs使用socket5进行代理请求的实现
2020/02/21 NodeJs
用js实现放大镜效果
2020/10/28 Javascript
jquery实现淡入淡出轮播图效果
2020/12/13 jQuery
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
Python编程中类与类的关系详解
2019/08/08 Python
python导入不同目录下的自定义模块过程解析
2019/11/18 Python
Django分组聚合查询实例分享
2020/04/29 Python
HTML5的Video标签有部分MP4无法播放的问题解析(多图)
2017/08/18 HTML / CSS
人力资源经理的岗位职责范本
2014/02/28 职场文书
企业管理标语
2014/06/10 职场文书
购房公证委托书(2014版)
2014/09/12 职场文书
2015年考研复习计划
2015/01/19 职场文书
感恩教育观后感
2015/06/17 职场文书
详解盒子端CSS动画性能提升
2021/05/24 HTML / CSS
Python实现拼音转换
2021/06/07 Python
SpringMVC 整合SSM框架详解
2021/08/30 Java/Android
SpringBoot集成MongoDB实现文件上传的步骤
2022/04/18 MongoDB
win10+RTX3050ti+TensorFlow+cudn+cudnn配置深度学习环境的方法
2022/06/25 Servers
Vite + React从零开始搭建一个开源组件库
2022/06/25 Javascript
Win11 Beta 预览版 22621.575 和 22622.575更新补丁KB5016694发布(附更新内容大全)
2022/08/14 数码科技