react-native - ФАТАЛНА ГРЕШКА: Неефективни mark-compacts близо до границата на купчината Разпределението е неуспешно - JavaScript купчината няма памет

Боря се с React Native и aws-sdk. Причината да използвам aws-sdk вместо aws-amplify е, защото:

aws-amplify не поддържа използване на предварително подписан URL за качване на файл

Моят проект работи добре, докато aws-sdk не бъде инсталиран от npm и aws-sdk-react-native не бъде импортиран (този файл е 4,3 MB, когато версията на aws-sdk е "2.369.0").

След като добавите този ред код:

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 

Опитвам много решения като:

increase-memory-limit

възел --max- old-space-size=8192 index.js

Ако сте изпробвали тези решения и работят, моля, уведомете ме. Може би съм направил нещо нередно

Ако имате някакви предложения, винаги съм готов да ви чуя.

Благодаря ви предварително!


person LuongTruong    schedule 04.12.2018    source източник


Отговори (2)


Мога да стартирам отстраняване на грешки, като променя package.json на:

"scripts": {
    ...
  "start-max": "node --max-old-space-size=8192 node_modules/react-native/local-cli/cli.js start",
    ...
},

При изпълнение на терминал: "npm run start-max", за да стартирате сървъра на възел с 8192 MB. След това стартирайте проекта си както обикновено: "react-native run-android".

Версия на Android:

Във файла build.gradle на приложението добавете този ред

project.ext.react = [
    entryFile: "index.js",
    nodeExecutableAndArgs: ["node", "--max-old-space-size=8192"]
]

Наслади се!

person LuongTruong    schedule 05.12.2018

Допълване на отговора на @LuongTruong с корекции на iOS.

Издаване на iOS:

Отидете на (XCode Workspace -› Project -› Build Phases -› Bundle React Native код и изображения)

Командата трябва да има тези три реда в горната част

export NODE_BINARY=node
export NODE_ARGS=--max-old-space-size=8192
export NODE_OPTIONS=--max-old-space-size=8192

Справка на https://sandny.com/2019/12/30/react-native-heap-limit-allocation-failed/

person Erick Maeda    schedule 04.06.2021