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中的parseInt使用技巧
Sep 03 Javascript
JavaScript中关于indexOf的使用方法与问题小结
Aug 05 Javascript
JavaScript高级程序设计 读书笔记之九 本地对象Array
Feb 27 Javascript
利用javascript实现禁用网页上所有文本框,下拉菜单,多行文本域
Dec 14 Javascript
jquery简单图片切换显示效果实现方法
Jan 14 Javascript
jQuery验证插件validate使用方法详解
Sep 13 Javascript
JavaScript 节流函数 Throttle 详解
Jul 04 Javascript
浅谈Web页面向后台提交数据的方式和选择
Sep 23 Javascript
微信小程序 教程之模块化
Oct 17 Javascript
JS 实现可停顿的垂直滚动实例代码
Nov 23 Javascript
JavaScript中document.referrer的用法详解
Jul 04 Javascript
jQuery实现的页面详情展开收起功能示例
Jun 11 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
如何删除多级目录
2006/10/09 PHP
IIS下配置Php+Mysql+zend的图文教程
2006/12/08 PHP
PHP生成不重复随机数的方法汇总
2014/11/19 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
详解PHP的抽象类和抽象方法以及接口总结
2019/03/15 PHP
php数组函数array_push()、array_pop()及array_shift()简单用法示例
2020/01/26 PHP
JavaScript中window、doucment、body的解释
2013/08/14 Javascript
javascript获取xml节点的最大值(实现代码)
2013/12/11 Javascript
JavaScript获取网页表单提交方式的方法
2015/04/02 Javascript
node.js Sequelize实现单实例字段或批量自增、自减
2016/12/08 Javascript
jQuery焦点图左右转换效果
2016/12/12 Javascript
jQuery Validate 数组 全部验证问题
2017/01/12 Javascript
微信小程序 页面跳转如何实现传值
2017/04/05 Javascript
vue、react等单页面项目应该这样子部署到服务器
2018/01/03 Javascript
纯JS开发baguetteBox.js响应式画廊插件
2020/06/28 Javascript
JS实现鼠标按下拖拽效果
2020/07/23 Javascript
vue中父子组件的参数传递和应用示例
2021/01/04 Vue.js
用Python中的wxPython实现最基本的浏览器功能
2015/04/14 Python
python实现比较两段文本不同之处的方法
2015/05/30 Python
pandas进行数据的交集与并集方式的数据合并方法
2018/06/27 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/26 Python
Python实现的简单计算器功能详解
2018/08/25 Python
pycharm如何实现跨目录调用文件
2020/02/28 Python
OpenCV+python实现实时目标检测功能
2020/06/24 Python
Django REST Swagger实现指定api参数
2020/07/07 Python
python与js主要区别点总结
2020/09/13 Python
scrapy利用selenium爬取豆瓣阅读的全步骤
2020/09/20 Python
用CSS3将你的设计带入下个高度
2009/08/08 HTML / CSS
纯css3实现照片墙效果
2014/12/26 HTML / CSS
小学学校评估方案
2014/06/08 职场文书
2015大学生自我评价范文
2015/03/03 职场文书
银行催款通知书
2015/04/17 职场文书
导游词之西安骊山
2019/12/03 职场文书
springcloud整合seata
2022/05/20 Java/Android
zabbix如何添加监控主机和自定义监控项
2022/08/14 Servers
Redis配置外网可访问(redis远程连接不上)的方法
2022/12/24 Redis