堆限制附近无效的标记-整理,分配失败-在angular中JavaScript堆内存不足

15

我正在使用Angular 7.2。当我输入ng serve时,我面临以下问题:

致命错误: 在堆接近限制的无效标记-压缩中分配失败 - JavaScript堆耗尽内存

这是什么意思?我该如何解决?

完整的错误信息如下:

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
1: 0x8f9d10 node::Abort() [ng serve --aot --proxy-config proxy.conf.json --host 0.0.0.0 --disable-host-check --live-reload --progress]
2: 0x8f9d5c  [ng serve --aot --proxy-config proxy.conf.json --host 0.0.0.0 --disable-host-check --live-reload --progress]
3: 0xaffd0e v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [ng serve --aot --proxy-config proxy.conf.json --host 0.0.0.0 --disable-host-check --live-reload --progress]
4: 0xafff44 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [ng serve --aot --proxy-config proxy.conf.json --host 0.0.0.0 --disable-host-check --live-reload --progress]
5: 0xef4152  [ng serve --aot --proxy-config proxy.conf.json --host 0.0.0.0 --disable-host-check --live-reload --progress]
6: 0xef4258 v8::internal::Heap::CheckIneffectiveMarkCompact(unsigned long, double) [ng serve --aot --proxy-config proxy.conf.json --host 0.0.0.0 --disable-host-check --live-reload --progress]
7: 0xf00332 v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [ng serve --aot --proxy-config proxy.conf.json --host 0.0.0.0 --disable-host-check --live-reload --progress]
8: 0xf00c64 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [ng serve --aot --proxy-config proxy.conf.json --host 0.0.0.0 --disable-host-check --live-reload --progress]
9: 0xf038d1 v8::internal::Heap::AllocateRawWithRetryOrFail(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) [ng serve --aot --proxy-config proxy.conf.json --host 0.0.0.0 --disable-host-check --live-reload --progress]
10: 0xeccd54 v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationSpace) [ng serve --aot --proxy-config proxy.conf.json --host 0.0.0.0 --disable-host-check --live-reload --progress]
11: 0x116cede v8::internal::Runtime_AllocateInNewSpace(int, v8::internal::Object**, v8::internal::Isolate*) [ng serve --aot --proxy-config proxy.conf.json --host 0.0.0.0 --disable-host-check --live-reload --progress]
12: 0x19f62a4dbe1d
Aborted (core dumped) 
npm ERR! code ELIFECYCLE
npm ERR! errno 134
npm ERR! colo-ui@2.0.11 start: `ng serve --aot --proxy-config proxy.conf.json --host 0.0.0.0 --disable-host-check --live-reload --progress `
npm ERR! Exit status 134
npm ERR!
npm ERR! Failed at the colo-ui@2.0.11 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2020-01-29T07_09_21_844Z-debug.log
4个回答

15

尝试使用此命令运行构建

node --max_old_space_size=8048 ./node_modules/@angular/cli/bin/ng serve

或者另一种方法是将此内容添加到package.json中

"build-serve": "node --max_old_space_size=8048 ./node_modules/@angular/cli/bin/ng serve"

8048是最大堆大小。


让大小为8192而不是8048。 - Sameh

11

问题: 在构建(编译)时,内存超出了为编译分配的内存。

解决方案: 增加分配内存。 8192 是下面脚本中使用的大小。您可以根据需要更改此值。

尝试运行以下命令:

服务:

node --max_old_space_size=8192 ./node_modules/@angular/cli/bin/ng serve

建筑:

node --max_old_space_size=8192 ./node_modules/@angular/cli/bin/ng build --prod

自定义脚本:

您的脚本命令(在注释中提到):

ng serve --aot --proxy-config proxy.conf.json --host 0.0.0.0 --disable-host-check --live-reload --progress

修改为:

node --max_old_space_size=8192 ./node_modules/@angular/cli/bin/ng serve --aot --proxy-config proxy.conf.json --host 0.0.0.0 --disable-host-check --live-reload --progress

我们正在使用“npm run start”来运行项目,脚本标签包含以下脚本:"start": "ng serve --aot --proxy-config proxy.conf.json --host 0.0.0.0 --disable-host-check --live-reload --progress ", - Rahul
更新的答案 :) - Jins Thomas Shaji
我们应该尝试找出编译过程中为什么需要这么多内存,并解决这个问题,而不是增加分配给编译的内存。 - Prince Agrawal
肯定的。只有当内存消耗无法进一步降低时才需要使用此解决方案。 - Jins Thomas Shaji

7
如果您使用的是旧版NodeJS,则升级到v12有助于解决此问题。
NodeJS v12具有不同的堆管理策略,更多信息请参见此处

1
直到我将NodeJS从v10升级到v12时,这个问题才真正出现。这非常令人困惑。 - MalcolmOcean

-2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接