首页 > 解决方案 > 致命错误:接近堆限制的无效标记压缩分配失败 - JavaScript 堆内存不足 | 反应式

问题描述

我没有艰巨的项目,我只是开始它。但是当我使用npm run devnode 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"
},

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

标签: node.jsreactjstypescriptnpmnext.js

解决方案


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

一个快速的解决方法是在控制台中手动增加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,你可以放任何你想要的数字。如果您放置的内存超过您的 RAM,它将与分页一起使用,因此速度可能会慢一些。

无缝的 :)


推荐阅读