angular4 JavaScript内存溢出问题
最近在写基于angular4的项目的时候,在build--prod的时候,突然措手不及的蹦出个报错,大致错误如下:
70%buildingmodules1345/1345modules0active <---LastfewGCs---> ms:Mark-sweep703.9(837.9)->701.4(811.9)MB,331.3/0ms[allocationfailure][GCinoldspacerequested]. ms:Mark-sweep701.4(811.9)->701.4(790.9)MB,350.5/0ms[allocationfailure][GCinoldspacerequested]. ms:Mark-sweep701.4(790.9)->698.0(760.9)MB,433.7/0ms[lastresortgc]. ms:Mark-sweep698.0(760.9)->692.7(751.9)MB,328.7/0ms[lastresortgc]. <---JSstacktrace---> ====JSstacktrace========================================= Securitycontext:00000298510373A91:/*anonymous*/(aka/*anonymous*/)[D:\dev\cobalt_wp\node_modules\webpack\lib\FlagDependencyExportsPlugin.js:77][pc=0000026F721B51D6](this=0000029851004131 ,dep=00000150FC6162C9 ) 2:argumentsadaptorframe:3->1 3:InnerArrayForEach(akaInnerArrayForEach)[nativearray.js:~924][pc=0000026F71EE3DCD](this=000002985100413... FATALERROR:CALL_AND_RETRY_LASTAllocationfailed-processoutofmemory
注:这里的代码并不是我的真实报错代码,编译时间太长,忘记截取了,大致的错误基本一样,如果你遇到了相同的问题,恭喜了,往下看能找到答案!
当时我是蒙圈了,一直都编译的挺好,怎么突然就溢出了呢?
可能的原因有如下:
1.angular4在编译的时候,对CPU和内存的需求比较大,当文件数量很多的时候,可能会出现内存不足的情况(有可能);
2.当代码出现大量大数据的循环或者死循环(sever阶段并没有出现溢出,这个概率应该不大);
3.angular订阅的数据在ngOnDestroy阶段没有被销毁,造成大量数据占用内存(有可能)
目前没有查到具体是什么原因造成的,哪位大神知道的,请不吝赐教,谢谢!
解决这个问题的过程很波折,这里就不说了,你们估计也不想知道,下面说一下解决方案吧:
核心思路是运用v8引擎的旧属性:--max_old_space_size来修改内存上线,至于这个属性在哪里设,就是一个磨人的小妖精了!
修改目录: my-project/node_modules/.bin 找到ng.cmd:
@IFEXIST"%~dp0\node.exe"( "%~dp0\node.exe"--max_old_space_size=8192"%~dp0\..\._@angular_cli@1.0.0@@angular\cli\bin\ng"%* )ELSE( @SETLOCAL @SETPATHEXT=%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:
@IFEXIST"%~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 @SETPATHEXT=%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设置了吗?至于数字设多少,你们自己看着办吧,我的项目比较大,设个大点的值,以防不测,哈哈!
然后执行ngbuild--prod,你以为这样就行了吗?这才是关键的地方!
本人亲测,如上设置,再执行编译依然会报内存溢出,貌似并没什么卵用!把当前目录切换到my-project/node_modules/.bin然后再执行ngbuild--prod,世界一下子就和平了!本人亲测有效,收好不谢!
如果你想问,为什么不加--aot,这个就留个你自己先想想吧!
好了,忙里抽闲,分享一下这个大坑的填坑方法,希望对大家有用!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。