致命错误:CALL_AND_RETRY_LAST分配失败 - JavaScript堆内存不足错误

时间:2018-05-31 09:30:41

标签: javascript node.js angular memory-leaks build

运行 ng build --prod

时出现此错误
  

92%的块资产优化< ---最后几个GC --->

     

[4136:0155D210] 443646 ms:标记扫描703.5(770.3) - > 703.6(759.8)   MB,2162.2 / 0.0 ms(自标记开始以0步开始+ 0.0 ms,   最大步长0.0毫秒,自开始标记2163毫秒后的最长时间   在旧空间的GC求助[4136:0155D210] 445794 ms:   标记扫描703.6(759.8) - >最后703.5(759.8)MB,2147.8 / 0.0 ms   请求在旧空间使用GC

     

< --- JS stacktrace --->

     

==== JS堆栈跟踪======================================== =

     

安全上下文:0369632D       1:创建(这= 036856A9)       2:_walk [034841A1:~764] [pc = 1CCAED1F](这= 3A11A619,访客= 3BCEFD7D)       3:/ *匿名* / [034841A1:~969] [pc = 1D3728E3](这= 3A11BCBD)       4:_walk [034841A1:~968] [pc = 1CCC1F3B](这= 3A11BCBD      

致命错误:CALL_AND_RETRY_LAST分配失败 - JavaScript堆   内存不足1:node_module_register 2:   v8 :: internal :: Factory :: NewStruct 3:   V8 ::内部::厂:: NewPrototypeInfo

我尝试了一切。我减少了变量的使用并检查了内存泄漏,并在ts文件中进行了非常少的回调。

我无法弄清楚如何做到这一点。我尝试使用&n; npm i增加内存限制' 来增加节点内存,并将限制增加到 2GB

我正在使用angular 4.节点版本是8.9.4

4 个答案:

答案 0 :(得分:3)

尝试导航到 yourproject / node_modules并运行以下命令:

node --max_old_space_size=5048 "%~dp0\..\@angular\cli\bin\ng" build --aot --prod

如果您想让自己的生活更轻松,可以将其插入package.json文件:

"scripts": {
   "build-prod": "node --max_old_space_size=5048 ./node_modules/@angular/cli/bin/ng build --prod"
}

然后您现在要做的就是运行npm run build-prod

答案 1 :(得分:0)

一旦构建了一个JS应用程序,我遇到了同样的问题,结果发现节点模块可以使用的内存限制。

只需使用这个npm包就可以解决它:https://www.npmjs.com/package/increase-memory-limit

答案 2 :(得分:0)

您可能希望了解increase-memory-limit如何增加引擎盖下的堆大小。

通常的方法如下:

node --max-old-space-size=8192 server.js  

如果以某种方式修改ng build命令,您可能需要尝试更多地增加限制。

答案 3 :(得分:0)

我在运行时遇到此错误

  

npm测试运行

对于临时情况,我们可以增加--max_old_space_size的限制

  

路径:node_modules/@yarnpkg/index.js

然后搜索--max_old_space_size,然后增加限制 但这是一个临时解决方案。

尝试这种方法,因为它似乎是永久解决方案- https://stackoverflow.com/a/57782016/1948482