ФАТАЛЬНАЯ ОШИБКА: неэффективные метки-компакты близки к пределу кучи. Ошибка распределения - невозможно создать main.jsbundle - PullRequest
0 голосов
/ 28 мая 2020

У меня проблема с моим мобильным приложением, поддерживающим реакцию. Мы используем

  • "aws -iot-device-sdk": "^ 2.2.4", "aws -sdk": "^ 2.678.0",

в нашем приложении для наших mqtt-сервисов. Приложение работает в режиме отладки в ios, но при настройке для app-center это не удалось, и была показана следующая ошибка, говорящая о javascript heap out памяти.

transform[stdout]: ==== JS stack trace
========================================= transform[stdout]:  transform[stdout]:     0: ExitFrame [pc: 0xd2c3765be3d]
transform[stdout]: Security context: 0x2a26ce71e6e9 <JSObject>
transform[stdout]:     1: /* anonymous */ [0x2a26d406ba61]
[/Users/XXX/Work/XXX/XXX/node_modules/@babel/traverse/lib/index.js:~77]
[pc=0xd2c379b8dbc](this=0x2a26d40456e1 <JSFunction traverse (sfi =
0x2a2688adac91)>,node=0x2a2621d1d6c1 <Node map =
0x2a26e47c9639>,opts=0x2a261b943559 <Object map =
0x2a26e47831d1>,scope=0x2a26423b0f01 <Scope map =
0x2a26e4784569>,sta... transform[stdout]:  transform[stderr]: FATAL
ERROR: Ineffective mark-compacts near heap limit Allocation failed -
JavaScript heap out of memory transform[stderr]:  1: 0x10003cf99
node::Abort() [/usr/local/bin/node] transform[stderr]:  2: 0x10003d1a3
node::OnFatalError(char const*, char const*) [/usr/local/bin/node]
transform[stderr]:  3: 0x1001b7835
v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char
const*, bool) [/usr/local/bin/node] transform[stderr]:  4: 0x100585682
v8::internal::Heap::FatalProcessOutOfMemory(char const*)
[/usr/local/bin/node] transform[stderr]:  5: 0x100588155
v8::internal::Heap::CheckIneffectiveMarkCompact(unsigned long, double)
[/usr/local/bin/node] transform[stderr]:  6: 0x100583fff
v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector,
v8::GCCallbackFlags) [/usr/local/bin/node] transform[stderr]:  7:
0x1005821d4
v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace,
v8::internal::GarbageCollectionReason, v8::GCCallbackFlags)
[/usr/local/bin/node] transform[stderr]:  8: 0x10058ea6c
v8::internal::Heap::AllocateRawWithLigthRetry(int,
v8::internal::AllocationSpace, v8::internal::AllocationAlignment)
[/usr/local/bin/node] transform[stderr]:  9: 0x10058eaef
v8::internal::Heap::AllocateRawWithRetryOrFail(int,
v8::internal::AllocationSpace, v8::internal::AllocationAlignment)
[/usr/local/bin/node] transform[stderr]: 10: 0x10055e434
v8::internal::Factory::NewFillerObject(int, bool,
v8::internal::AllocationSpace) [/usr/local/bin/node]
transform[stderr]: 11: 0x1007e6714
v8::internal::Runtime_AllocateInNewSpace(int, v8::internal::Object**,
v8::internal::Isolate*) [/usr/local/bin/node] transform[stderr]: 12:
0xd2c3765be3d  transform[stdout]:  transform[stdout]: <--- Last few
GCs ---> transform[stdout]:  transform[stdout]: [23942:0x102b00000]  
374196 ms: Scavenge 1374.0 (1423.8) -> 1373.7 (1424.3) MB, 11.0 / 0.0
ms  (average mu = 0.109, current mu = 0.018) allocation failure 
transform[stdout]: [23942:0x102b00000]   402358 ms: Mark-sweep 1374.4
(1424.3) -> 1374.1 (1423.8) MB, 28158.8 / 0.0 ms  (average mu = 0.062,
current mu = 0.009) allocation failure scavenge might not succeed
transform[stdout]: [23942:0x102b00000]   402424 ms: Scavenge 1374.8
(1423.8) -> 1374.5 (1424.3) MB, 29.1 / 0.0 ms  (average mu = 0.062,
current mu = 0.009) allocation failure```

Я видел много статей о добавлении:

shellScript = "export NODE_BINARY=\"'node --max_old_space_size=8192'\n../node_modules/react-native/scripts/react-native-xcode.sh\"\n";

в файл project.pbxproj внутри

/ * Объедините собственный код и изображения React в пакет * /

section. Это было добавлено, и сборка app-center прошла успешно, но приложение вылетело при установке ipa на реальном устройстве.

Я попытался создать ipa, используя опцию Archive в Xcode, и xcode не удалось выбросить main.jsbundle не найти. Пытался создать main.jsbundle с помощью команды

react-native bundle --entry-file index.js --platform ios --dev false
--bundle-output ios/main.jsbundle --assets-dest ios

, но также не удалось отобразить исключение кучи, такое же, как у меня в app-center. В то же время режим отладки работает нормально, хотя у меня была такая же проблема с кучей, я запустил сборщик, используя

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

Не уверен, как создать сборку выпуска для iOS. Было бы очень полезно, если бы кто-нибудь мог помочь мне найти решение для этого. Кто-нибудь сталкивался с этой проблемой и мог ее решить?

System:
    OS: macOS 10.15
    CPU: (4) x64 Intel(R) Core(TM) i5-5350U CPU @ 1.80GHz
    Memory: 685.68 MB / 8.00 GB
    Shell: 3.2.57 - /bin/bash
  Binaries:
    Node: 10.16.0 - /usr/local/bin/node
    Yarn: 1.15.2 - /usr/local/bin/yarn
    npm: 6.9.0 - /usr/local/bin/npm
    Watchman: Not Found
  SDKs:
    iOS SDK:
      Platforms: iOS 13.2, DriverKit 19.0, macOS 10.15, tvOS 13.2, watchOS 6.1
    Android SDK:
      API Levels: 23, 27, 28, 29
  IDEs:
    Android Studio: 3.6 AI-192.7142.36.36.6392135
    Xcode: 11.3.1/11C504 - /usr/bin/xcodebuild
  Languages:
    Python: 2.7.17 - /usr/local/bin/python
  npmPackages:
    @react-native-community/cli: Not Found
    react: 16.11.0 => 16.11.0 
    react-native: 0.62.0 => 0.62.0 
  npmGlobalPackages:
    *react-native*: Not Found
...