node.js - react-native - 致命错误:接近堆限制的无效标记压缩分配失败 - JavaScript 堆内存不足
问题描述
我正在努力解决React Native
and aws-sdk
。我使用aws-sdk
而不是的原因aws-amplify
是:
我的项目工作正常,直到aws-sdk
安装并被npm
导入(当版本为“2.369.0”aws-sdk-react-native
时,此文件为 4.3MB )。aws-sdk
添加这行代码后:
const AWS = require("aws-sdk/dist/aws-sdk-react-native");
应用程序崩溃并显示错误消息:
transform[stdout]: <--- Last few GCs --->
transform[stdout]:
transform[stdout]: [5433:0x103800000] 59176 ms: Mark-sweep 1256.2 (1442.0) -> 1236.2 (1434.5) MB, 3855.9 / 0.0 ms (average mu = 0.239, current mu = 0.130) allocation failure scavenge might not succeed
transform[stdout]: [5433:0x103800000] 63390 ms: Mark-sweep 1259.8 (1442.5) -> 1243.1 (1438.5) MB, 3924.9 / 0.0 ms (average mu = 0.161, current mu = 0.069) allocation failure scavenge might not succeed
transform[stdout]:
transform[stdout]:
transform[stdout]: <--- JS stacktrace --->
transform[stdout]:
transform[stdout]: ==== JS stack trace =========================================
transform[stdout]:
transform[stdout]: 0: ExitFrame [pc: 0x1e49a5a5be3d]
transform[stdout]: Security context: 0x21d5cac9e6e1 <JSObject>
transform[stdout]: 1: queue [0x21d5c3f5fc09] [/Users/yumac/Projects/ReactNative/Demo/OutOfMemory/node_modules/@babel/generator/lib/buffer.js:~88] [pc=0x1e49a5f9825e](this=0x21d55e682309 <Buffer map = 0x21d51ca6ba29>,str=0x21d577355491 <String[12]: >)
transform[stdout]: 2: StringLiteral [0x21d5c3f07491] [/Users/yumac/Projects/ReactNative/Demo/OutOfMemory/node_modules/@babel/ge...
transform[stdout]:
transform[stderr]: FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
transform[stderr]: 1: 0x10003ae75 node::Abort() [/usr/local/bin/node]
transform[stderr]: 2: 0x10003b07f node::OnFatalError(char const*, char const*) [/usr/local/bin/node]
transform[stderr]: 3: 0x1001a7ae5 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/usr/local/bin/node]
transform[stderr]: 4: 0x100572ef2 v8::internal::Heap::FatalProcessOutOfMemory(char const*) [/usr/local/bin/node]
transform[stderr]: 5: 0x1005759c5 v8::internal::Heap::CheckIneffectiveMarkCompact(unsigned long, double) [/usr/local/bin/node]
transform[stderr]: 6: 0x10057186f v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [/usr/local/bin/node]
transform[stderr]: 7: 0x10056fa44 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/usr/local/bin/node]
transform[stderr]: 8: 0x10057c2dc v8::internal::Heap::AllocateRawWithLigthRetry(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) [/usr/local/bin/node]
transform[stderr]: 9: 0x10057c35f v8::internal::Heap::AllocateRawWithRetryOrFail(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) [/usr/local/bin/node]
transform[stderr]: 10: 0x10054bca4 v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationSpace) [/usr/local/bin/node]
transform[stderr]: 11: 0x1007d3b54 v8::internal::Runtime_AllocateInNewSpace(int, v8::internal::Object**, v8::internal::Isolate*) [/usr/local/bin/node]
transform[stderr]: 12: 0x1e49a5a5be3d
transform[stderr]: 13: 0x1e49a5f9825e
transform[stderr]: 14: 0x1e49a5f84e0f
transform[stderr]: 15: 0x1e49a5a0a5c3
transform[stderr]: 16: 0x1e49a5ee8a79
我尝试了很多解决方案,例如:
节点 --max-old-space-size=8192 index.js
如果您尝试了这些解决方案并且它有效,请告诉我。也许我做错了什么
如果您有任何建议,我总是愿意听取您的意见。
先感谢您!
解决方案
我可以通过更改来运行调试package.json
:
"scripts": {
...
"start-max": "node --max-old-space-size=8192 node_modules/react-native/local-cli/cli.js start",
...
},
在终端运行:“npm run start-max”以 8,192 MB 启动节点服务器。然后正常运行您的项目:“react-native run-android”。
安卓版本:
在 app build.gradle 文件中,添加这一行
project.ext.react = [
entryFile: "index.js",
nodeExecutableAndArgs: ["node", "--max-old-space-size=8192"]
]
享受!
推荐阅读
- python - 为什么 makedirs() 创建一个空文件而不是文件夹?
- c# - 如何在 IMemoryCache 的单独实例中清除 cacheKey
- elixir - 如何测试 Ecto 迁移
- php - 在 Typo3 7.6 中创建前端插件
- python - 如何将一列列表变成带有熊猫的集合?
- html - 在作用域插槽中绑定更多属性
- java - Keycloak - 自定义 SPI 未出现在列表中
- django - Django & Django ORM:批量更新记录的性能改进
- arrays - tcl 数组中的某些元素不可访问(即“数组中没有这样的元素”)
- swift - 特化 Self 是泛型类的协议