致命错误:接近堆限制的无效标记压缩分配失败 - Ionic 3 中的 JavaScript 堆内存不足

IT技术 javascript ionic-framework ionic3 ionic-serve
2021-02-03 04:48:38

当我使用该ionic serve命令运行 Ionic 3 项目时,我收到此错误:

致命错误的屏幕截图:接近堆限制的无效标记压缩分配失败 - JavaScript

6个回答

对于那些从谷歌登陆这个问题的人的非角一般答案:

每次遇到此错误时,可能是因为内存泄漏或 Node.js <= 10 和 Node.js > 10 管理内存的方式不同。

通常只是增加分配给 Node.js 的内存将允许您的程序运行,但实际上可能无法解决真正的问题,并且节点进程使用的内存仍然可能超过您分配的新内存。我建议在 Node.js 进程开始运行或更新到 Node.js > 10 时分析它的内存使用情况。

我有内存泄漏。这是一篇关于在 Node.js 中调试内存泄漏的好文章

也就是说,要增加内存,请在运行 Node.js 进程的终端中:

export NODE_OPTIONS="--max-old-space-size=8192"

其中的值max-old-space-size可以是:[2048, 4096, 8192, 16384]

更多示例以进一步清晰:

export NODE_OPTIONS="--max-old-space-size=5120" # Increase to 5 GB
export NODE_OPTIONS="--max-old-space-size=6144" # Increase to 6 GB
export NODE_OPTIONS="--max-old-space-size=7168" # Increase to 7 GB
export NODE_OPTIONS="--max-old-space-size=8192" # Increase to 8 GB

# and so on...

# formula:
export NODE_OPTIONS="--max-old-space-size=(X * 1024)" # Increase to X GB

# Note: it doesn't have to be multiples of 1024.
# max-old-space-size can be any number of memory megabytes (MB) you have available.
@MikhailVasin 请参阅我的回答中的最后一条评论。我知道它没有。我只是把它放在那些想要以 GB 为单位的公共内存增量的人那里。
2021-03-14 04:48:38
感谢这适用于所有类型的应用程序有内存问题。
2021-03-24 04:48:38
仅供参考,默认值为 512 MB。你不需要直接跳到那个数量的 10 倍,你可以先尝试 512 和 5120 之间的东西。
2021-03-30 04:48:38
只是想指出 - 这并不总是表示内存泄漏。也许您正在使用的库使用的内存比以前多一些。对于我们来说next.js,使用快速刷新功能开始使我们的应用程序崩溃。
2021-04-06 04:48:38
@DanielCooke 你为下一个 js 使用了什么值?您能否与下一个 js 分享您针对此问题使用的解决方案
2021-04-09 04:48:38

就我而言,我通过安装 Node.js 版本 12.10.0 解决了这个问题。

@NitishKumar 我仍然收到 Node 12 /shrug 的错误。接受的应该是最能解决 OP 用例的那个——尽管您希望他们此时会选择其中一个答案。
2021-03-13 04:48:38
@DerekDowling Wayback 导致链接断开:web.archive.org/web/20191103115941/https : //...
2021-03-22 04:48:38
同样在这里。我刚刚更改了版本及其作品。
2021-03-24 04:48:38
没有其他东西对我有用,就是这样。太感谢了 :)
2021-03-30 04:48:38
对于上下文,节点 12 有一个不同的堆管理策略,它基于可用内存而不是使用默认值。更多细节在这里:foundation.nodejs.org/announcements/2019/04/24/...
2021-04-10 04:48:38

我在CentOS服务器 7上遇到了同样的问题,但这解决了我的问题:

node --max-old-space-size=X node_modules/@angular/cli/bin/ng build --prod

X = (2048 or 4096 or 8192 o..)记忆的value在哪里

我可以将 X 的值设置为大于 8192 吗?我有 32GB 的内存
2021-03-13 04:48:38
如果您在 docker 中运行它并得到 KILLED 错误,请增加分配给 docker 引擎的 RAM。
2021-03-18 04:48:38
对我来说,在命令行上提供 max-old-space-size 不起作用。这可能是与基于 nvm 的节点的交互?相反,在 bash 脚本中,我使用了 'NODE_OPTIONS="--max-old-space-size=2048" 节点 $NG build --prod --progress=false' 有效,而不是 'node --max-old -space-size=2048 $NG build --prod --progress=false' 没有。我仍然不知道为什么。
2021-03-22 04:48:38
更改 x 的值后.. 错误保持不变
2021-04-04 04:48:38
如果错误仍然存​​在,请继续增加大小,直到有足够的内存进行处理,这将最终防止错误发生。唯一一次我发现我无法克服这个错误是因为需要将在该部分中引用ng serve大量.js 文件加载到内存中。scriptsangular.json
2021-04-09 04:48:38

只需在终端中输入:

export NODE_OPTIONS="--max-old-space-size=8192"

当您超过 Node.js 允许的默认最大内存时,就会发生错误。所有这些都是增加允许的最大内存。

如果您在 shell 上工作,这就是解决方案
2021-03-26 04:48:38

ng build在 Visual Studio Code 中执行命令时遇到了同样的错误但是当我按以下顺序在 Windows 命令行上执行相同的操作时,我可以成功构建。

步骤1。

set NODE_OPTIONS=--max_old_space_size=4096

第2步。

ng build
我已将它添加到文件浴/Users/MY_USER/.nvm/versions/node/v10.13.0/lib/node_modules/npm/bin/npm.cmd它工作正常
2021-03-23 04:48:38
谢谢,这对我帮助很大,刚刚切换了我的终端
2021-04-01 04:48:38