如何找出导致 JavaScript 堆内存不足的代码

问题描述 投票:0回答:3

我正在尝试运行

yarn start
但得到这个:

启动开发服务器...

ts-loader:使用 [电子邮件受保护] 和 C:\DevTools\git\mymoto sconfig.json

<--- Last few GCs --->

[9076:000001F4910F0DA0] 120343 ms:标记-扫描(减少)2045.0 (2051.8) -> 2044.3 (2053.0) MB,1410.7 / 0.0 ms(平均 mu = 0.123,当前 mu = 0.011)分配失败清除可能不会成功 [9076:000001F4910F0DA0] 122662 ms:标记扫描(减少)2045.4 (2052.0) -> 2044.6 (2053.0) MB,2288.3 / 0.0 ms(平均 mu = 0.057,当前 mu = 0.013)分配失败清除可能不会成功

<--- JS stacktrace --->

致命错误:接近堆限制的无效标记压缩分配失败 - JavaScript 堆内存不足 1:00007FF79BA7021F napi_wrap+109311 2: 00007FF79BA15286 v8::内部::OrderedHashTable::NumberOfElementsOffset+33302 3: 00007FF79BA16056 节点::OnFatalError+294 4: 00007FF79C2E054E v8::隔离::报告外部分配限制已达到+94 5: 00007FF79C2C53CD v8::SharedArrayBuffer::外部化+781 6: 00007FF79C16F85C v8::内部::堆::EphemeronKeyWriteBarrierFromCode+1516 7: 00007FF79C17AB9A v8::内部::堆::保护未受保护的内存块+1258 8: 00007FF79C177D49 v8::内部::堆::PageFlagsAreConfirm+2457 9: 00007FF79C16C971 v8::内部::堆::收集垃圾+2033 10: 00007FF79C16AB75 v8::内部::堆::分配外部备份存储+1317 11: 00007FF79C18AF67 v8::内部::工厂::NewFillerObject+183 12:00007FF79BEBAFF1 v8::内部::解释器::JumpTableTargetOffsets::迭代器::运算符=+1409 13: 00007FF79C368EFD v8::内部::SetupIsolateDelegate::SetupHeap+463949 14:000001177FAE26D4

我在这里看到了一些问题,它们似乎都提出了类似

node --max_old_space_size=8048
的内容。在大多数情况下,问题会突出显示导致此问题的代码。我不明白这是什么。我如何找出导致问题的原因?我想先看看是否有什么问题,而不是盲目尝试。

项目文件夹中存在我的

node_modules
文件夹的副本是否会以任何方式导致此问题?

javascript reactjs typescript create-react-app yarnpkg
3个回答
1
投票

不久前也遇到过这个问题。这对我有帮助

 node --max-old-space-size=8048

您尝试过使用NVM吗?降级你的 Node/Typescript 版本可以帮助你。顺便说一句,我使用的是 Node v14.15.5。


1
投票

我有我的

node_modules
文件夹和
node_modules_backup
。当我删除
node_modules_backup
时,问题就解决了。


0
投票

刚刚为自己解决了这个问题。

关注了此 Vite 问题的所有评论,但没有任何效果。然而,当我使用

npx depcheck
深入分析我的依赖项时,我发现我安装了大量的依赖项,但我没有在我的存储库中使用它们。我清除了它们,删除了node_modules,然后重新运行
npm i

然后我重新运行构建命令(使用内存增加命令)并幸运地解决了问题。这花了我一整天的时间来修复,希望能为其他人减轻这个痛处。

当我使用 Vite 时,这正是我运行以使其正常工作的

npm run build
命令:
cross-env NODE_OPTIONS=--max-old-space-size=15872 && tsc && vite build

© www.soinside.com 2019 - 2024. All rights reserved.