Почему это приводит к ФАТАЛЬНОЙ ОШИБКЕ: неэффективные компакты меток, близкие к пределу кучи. Ошибка выделения - JavaScript куча из памяти? - PullRequest
0 голосов
/ 05 августа 2020

Я относительно новичок в Node JS, но у меня возникла ошибка, которую я никогда раньше не видел. У него нет трассировки стека, как у других ошибок, которые я видел в прошлом.

Promise.all(hasInitialScrapeCompleted).then(() => {
  console.log("The data after the first scrape is: ", allData);
  while (true) {
    allData.forEach((item) => {
      let x= scrapeInfo(item.url);
      x.then((data) => {
        if (data.sizes === item.availableSizes) {
          console.log("The sizes for: ", item.url);
          console.log("are equal. Attempting to track a new product");
        } else {
          console.log("There is a change in the available sizes.");
          item.availableSizes = data.sizes;
          console.log("Sending notification now...");
          sendNotification(item.url);
        }
      });
    });
  }
});

Я пытаюсь перебирать массив объектов (allData), каждый из которых содержит URL-адрес, используя forEach ( ) метод. Метод scrapeInfo () делает это асинхронно, сначала возвращая обещание, а после того, как обещание возвращается, он оценивает полученную информацию относительно массива объектов (allData). Если есть изменение, он отправит уведомление пользователю через sendNotification (), который еще не реализован, но также должен быть асинхронным. Я заметил, что мое использование ОЗУ увеличилось до 2 ГБ +, что для этого типа приложений полностью избыточно.

Я подозреваю, что это происходит потому, что while (True) l oop создает новые обещания быстрее, чем они могут быть разрешены, но я не могу придумать другого способа реализовать это. Я привык к синхронному программированию, поэтому такой лог c работает в синхронном программировании, но я не уверен, как это должно быть реализовано асинхронно.

Вот полная ошибка:

<--- Last few GCs --->

[18112:00000157602690A0]    42266 ms: Scavenge 2034.1 (2048.1) -> 2025.5 (2048.9) MB, 5.7 / 0.0 ms  (average mu = 0.152, current mu = 0.114) allocation failure
[18112:00000157602690A0]    42277 ms: Scavenge 2034.8 (2048.9) -> 2026.2 (2049.9) MB, 5.4 / 0.0 ms  (average mu = 0.152, current mu = 0.114) allocation failure
[18112:00000157602690A0]    42288 ms: Scavenge 2035.4 (2049.9) -> 2026.8 (2062.4) MB, 5.3 / 0.0 ms  (average mu = 0.152, current mu = 0.114) allocation failure


<--- JS stacktrace --->

==== JS stack trace =========================================

    0: ExitFrame [pc: 00007FF79B18B3BD]
Security context: 0x02fd036c08d1 <JSObject>
    1: new Set(aka Set) [000002FD036D4031](this=0x02fb73f40591 <the_hole>,0x005466fc56d9 <JSArray[0]>)
    2: ConstructFrame [pc: 00007FF79B10B9FA]
    3: resolvePluginDependencies [0000037CAAAD3D11] [C:\Users\user\node_modules\puppeteer-extra\dist\index.cjs.js:~270] [pc=0000014D3FE1FC67](this=0x017b8465c949 <PuppeteerExtra map = 0000028FFB2C1839>)
    4: ...

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
 1: 00007FF79A575EBF napi_wrap+114095
 2: 00007FF79A520B46 v8::base::CPU::has_sse+66998
 3: 00007FF79A521946 v8::base::CPU::has_sse+70582
 4: 00007FF79AD36E4E v8::Isolate::ReportExternalAllocationLimitReached+94
 5: 00007FF79AD1EF21 v8::SharedArrayBuffer::Externalize+833
 6: 00007FF79ABEB18C v8::internal::Heap::EphemeronKeyWriteBarrierFromCode+1436
 7: 00007FF79ABF63C0 v8::internal::Heap::ProtectUnprotectedMemoryChunks+1312
 8: 00007FF79ABF2EE4 v8::internal::Heap::PageFlagsAreConsistent+3204
 9: 00007FF79ABE86E3 v8::internal::Heap::CollectGarbage+1283
10: 00007FF79ABEEF74 v8::internal::Heap::GlobalSizeOfObjects+212
11: 00007FF79AC2507B v8::internal::StackGuard::HandleInterrupts+907
12: 00007FF79A96F999 v8::internal::interpreter::JumpTableTargetOffsets::iterator::operator=+7737
13: 00007FF79B18B3BD v8::internal::SetupIsolateDelegate::SetupHeap+546637
14: 00007FF79B16EB35 v8::internal::SetupIsolateDelegate::SetupHeap+429765
15: 00007FF79B10B9FA v8::internal::SetupIsolateDelegate::SetupHeap+23946
16: 0000014D3FE1FC67 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...