【问题标题】:Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory in angular堆限制附近的无效标记压缩分配失败 - JavaScript 角度内存不足
【发布时间】:2020-05-14 21:13:54
【问题描述】:

我正在使用 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

【问题讨论】:

    标签: javascript node.js angular npm


    【解决方案1】:

    尝试用这个运行构建

    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 是最大堆大小。

    【讨论】:

      【解决方案2】:

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

      修复:增加分配内存。 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 ",
      • 更新答案:)
      • 与其为编译增加分配的内存,我们不应该尝试弄清楚为什么在编译期间需要这么多内存并修复它吗?
      • 当然。仅当内存消耗无法进一步减少时才需要此解决方案。
      【解决方案3】:

      如果您使用的是旧版本的 NodeJS,那么将 NodeJS 升级到 v12 有助于解决这个问题。

      NodeJS v12 有不同的堆管理策略,查看更多信息here

      【讨论】:

      • 对我来说,直到我将 NodeJS 升级到 v12(从 v10)时,这个问题才真正出现。这非常令人困惑。
      【解决方案4】:

      尝试从https://nodejs.org/en/download/更新node.js包

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-10-06
        • 2020-03-12
        • 2021-10-20
        • 2021-05-06
        • 2020-08-22
        • 2023-02-20
        • 2021-11-08
        • 1970-01-01
        相关资源
        最近更新 更多