angular4 JavaScript記憶體溢出問題,angular4javascript

來源:互聯網
上載者:User

angular4 JavaScript記憶體溢出問題,angular4javascript

最近在寫基於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 , 這個就留個你自己先想想吧!

好了,忙裡抽閑,分享一下這個大坑的填坑方法, 希望對大家有用!

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援幫客之家。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.