node.js - 致命错误:接近堆限制的无效标记压缩分配失败 - JavaScript 堆内存不足 | 反应式
问题描述
我没有艰巨的项目,我只是开始它。但是当我使用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"
},
如果你需要其他我会添加这个
解决方案
你需要给节点更多的内存。
一个快速的解决方法是在控制台中手动增加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,它将与分页一起使用,因此速度可能会慢一些。
无缝的 :)
推荐阅读
- python - 允许用户直接从 Python 中的 URL 中选择网页元素
- html - 为什么当我输入 nodejs 正在侦听的浏览器 IP 和端口时看不到响应?
- html - 如何在表单html中居中输入按钮
- vue.js - Vue Composition API:安装回设置中的初始化变量
- spring-boot - 当状态不是 RUNNING 时在 Kafka 启动时执行代码
- django - Django ImageKit 在管理站点内更改图像尺寸
- python - 如何实现我自己的搜索过滤器 - Django?
- python - Nearest latitude and longitude points in python
- reactjs - react-router-dom V6 中的嵌套路由
- python - 如何使用 IB API 获取当前价格