致命错误:堆限制附近的无效标记压缩分配失败 - JavaScript 堆内存不足 |反应

Posted

技术标签:

【中文标题】致命错误:堆限制附近的无效标记压缩分配失败 - JavaScript 堆内存不足 |反应【英文标题】:FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory | reactjs 【发布时间】:2021-11-08 06:27:22 【问题描述】:

我没有艰巨的项目,我只是开始它。但是当我使用npm run dev node js 吃了超过 4GB 的内存之后,我看到了致命错误:

--- Last few GCs --->

[16804:0000018EB02350F0]   128835 ms: Mark-sweep (reduce) 4092.4 (4101.2) -> 4091.5 (4102.4) MB, 2886.3 / 0.0 ms  (average mu = 0.106, current mu = 0.002) allocation failure scavenge might not succeed
[16804:0000018EB02350F0]   133745 ms: Mark-sweep (reduce) 4092.7 (4104.7) -> 4091.8 (4104.9) MB, 4899.7 / 0.0 ms  (average mu = 0.042, current mu = 0.002) allocation failure scavenge might not succeed


<--- JS stacktrace --->

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - javascript heap out of memory
 1: 00007FF7D7A94BDF napi_wrap+111007
 2: 00007FF7D7A38166 v8::base::CPU::has_sse+59910
 3: 00007FF7D7A39066 node::OnFatalError+294
 4: 00007FF7D831217E v8::Isolate::ReportExternalAllocationLimitReached+94
 5: 00007FF7D82F6F4D v8::SharedArrayBuffer::Externalize+781
 6: 00007FF7D81A008C v8::internal::Heap::EphemeronKeyWriteBarrierFromCode+1516
 7: 00007FF7D81AB4AA v8::internal::Heap::ProtectUnprotectedMemoryChunks+1258
 8: 00007FF7D81A85E9 v8::internal::Heap::PageFlagsAreConsistent+2457
 9: 00007FF7D819D181 v8::internal::Heap::CollectGarbage+2049
10: 00007FF7D819B385 v8::internal::Heap::AllocateExternalBackingStore+1349
11: 00007FF7D81BB7FB v8::internal::Factory::NewFillerObject+203
12: 00007FF7D7EEA2D1 v8::internal::interpreter::JumpTableTargetOffsets::iterator::operator=+1409
13: 00007FF7D839B03D v8::internal::SetupIsolateDelegate::SetupHeap+465325
14: 0000019D8C81DCE3
npm ERR! code ELIFECYCLE
npm ERR! errno 134
npm ERR! top-app@0.1.0 dev: `next dev`
npm ERR! Exit status 134
npm ERR!
npm ERR! Failed at the top-app@0.1.0 dev script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

我使用相当默认的 package.json:

"scripts": 
    "dev": "next dev",
    "debug": "set NODE_OPTIONS=--inspect && next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint",
    "stylelint": "stylelint \"**/*.css\" --fix"
,

如果你还需要其他我会添加这个

【问题讨论】:

【参考方案1】:

你需要给节点更多的内存。

可以在控制台中手动增加max_old_space_size 的快速解决方法。从那一刻起,所有的构建都会顺利进行。你可以启动这个命令:

SET NODE_OPTIONS=--max_old_space_size=8048

如果您想要一个更稳定的解决方案,您应该更改 dev 命令的定义,如下所示:

SET NODE_OPTIONS=--max_old_space_size=8048 && next dev

这样您就可以确保 max_old_space_size 始终设置为比默认值更高的数字,而不会做任何与以前不同的事情。

8048 是以字节为单位的大小,所以 8GB,你可以放任何你想要的数字。如果你放的内存多于你的内存,它会进行分页,所以它可能会慢一些。

无缝:)

【讨论】:

好的,谢谢。这只是组件中的递归

以上是关于致命错误:堆限制附近的无效标记压缩分配失败 - JavaScript 堆内存不足 |反应的主要内容,如果未能解决你的问题,请参考以下文章

Nuxt 生成致命错误:在堆限制附近的无效标记压缩分配失败 - JavaScript 堆内存不足

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

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

致命错误:接近堆限制的无效标记压缩分配失败 - JavaScript 堆内存不足 Angular 13 应用程序

致命错误:接近堆限制的无效标记压缩分配失败 - 使用 fs 处理大文件时 JavaScript 堆内存不足

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