FATALT FEL: Ineffektiva mark-kompaktningar nära heap-gränsen Allokering misslyckades - JavaScript-heap slut på minne i Ionic 3


När jag kör ett Ionic 3-projekt med kommandot ionic serve får jag detta fel:

Svar #1

För ett icke-Angular generellt svar för dem som hamnar på denna fråga från Google:

De flesta gånger när du stöter på detta fel beror det troligen på ett minnesläckage, en tilläggs-/versionsuppgradering av ett bibliotek eller en skillnad i hur Node.js hanterar minne mellan versioner (t.ex. Node.js version <= 10 och Node.js version > 10).

Vanligtvis räcker det med att öka det minne som tilldelas Node.js för att programmet ska kunna köras men det löser kanske inte det verkliga problemet och minnet som används av node-processen kan fortfarande överstiga det nya minne du tilldelar. Jag skulle rekommendera att profilera minnesanvändningen i din Node.js-process när den börjar köras eller uppdatera till Node.js > 10.

Jag hade en minnesläcka. Här är en bra artikel om felsökning av minnesläckor i Node.js.

Det sagt, för att öka minnet, i terminalen där du kör din Node.js-process:

export NODE_OPTIONS="--max-old-space-size=8192"

Eller för Windows:

Set NODE_OPTIONS="--max-old-space-size=8192"

där värden för max-old-space-size kan vara: [2048, 4096, 8192, 16384] etc

Fler exempel för ytterligare tydlighet:

export NODE_OPTIONS="--max-old-space-size=5120" # Increase to 5 GB
export NODE_OPTIONS="--max-old-space-size=6144" # Increase to 6 GB
export NODE_OPTIONS="--max-old-space-size=7168" # Increase to 7 GB
export NODE_OPTIONS="--max-old-space-size=8192" # Increase to 8 GB

and so on...

formula:
export NODE_OPTIONS="--max-old-space-size=(X * 1024)" # Increase to X GB

Note: it doesn't have to be multiples of 1024.
max-old-space-size can be any number of memory megabytes (MB) you have available.

Se det aktuella värdet på max-old-space-size (i MB)

För att se det aktuella (inte exakt men mycket nära) värdet på max-old-space-size (i MB), kör i din terminal

node -e 'console.log(v8.getHeapStatistics().heap_size_limit/(1024*1024))'

Svar #2

Skriv bara detta i terminalen:

export NODE_OPTIONS="--max-old-space-size=8192"

Felet uppstår när du överskrider standardgränsen för det maximala minnet som tillåts för Node.js. Allt detta gör är att öka det maximala minnet som tillåts.

Svar #3

I mitt fall löste jag detta problem genom att installera Node.js, version 12.10.0.

Svar #4

Jag hade samma problem på CentOS server 7, men detta löste mitt problem:

node --max-old-space-size=X node_modules/@angular/cli/bin/ng build --prod

Där X=(2048 eller 4096 eller 8192 o..) är värdet på minnet.

Svar #5

Jag fick samma fel när jag körde ng build-kommandot i Visual Studio Code. Men jag kan bygga framgångsrikt när jag kör samma sak i Windows kommandorad i följande ordning.

Steg 1.

set NODE_OPTIONS=--max_old_space_size=4096

Steg 2.

ng build

Svar #6

Windows

Från kontrollpanelen gå till System → Avancerade systeminställningar → Miljövariabler → Ny (användare eller system)

Eller detta kan göras i PowerShell med:

$env:NODE_OPTIONS="--max-old-space-size=8192"

Du kan också öka detta antal om det behövs. Vi har sett att folk behöver öka detta till upp till 14 GB för några större projekt!

Linux/macOS

export NODE_OPTIONS=--max-old-space-size=8192

Svar #7

Prova denna lösning som påpekades i ett gammalt meddelande på forumet: 3.7.0: iOS-uppbyggnad med --prod fungerar inte

Öppna node_modules/@ionic/app-scripts/bin/ionic-app-scripts.js

Ändra den första raden från:

#!/usr/bin/env node

till

#!/usr/bin/env node --max-old-space-size=4096

Prova värdena 1024 och 2048, men för en relativt stor app kan du behöva 4096.

Svar #8

I mitt fall var det en rekursion som gjorde att React använde all minne.

Det här hände när jag refaktorerade min kod och inte märkte det här.

const SumComponent = () => {
  return (
    <>
      <SumComponent />
    </>
  )
}

I andra Node.js-applikationer kan detta se ut så här:

const someFunction = () => {
  ...
  someFunction();
  ...
}

Svar #9

Jag fick samma felmeddelande när jag körde följande instruktioner i Visual Studio Code. Men jag kan bygga framgångsrikt när jag kör samma sak i Windows kommandorad.

npm install -g increase-memory-limit
increase-memory-limit
set NODE_OPTIONS=--max_old_space_size=4096
ng build -c deploy --build-optimizer --aot --prod --sourceMap

Svar #10

Att uppdatera från Node.js 12 till Node.js 14 löste problemet för mig.


Uppdatering
Nu är Node.js 16 tillgängligt, och jag rekommenderar att uppdatera till den senaste tillgängliga versionen av Node.js.

Svar #11

  1. export NODE_OPTIONS="--max-old-space-size=6144" #det kommer att öka till 6 GB.
  • Om det inte är löst, försök detta andra steg
  1. Bara uppdatera din node-version till den senaste så kommer detta problem att lösas.
  • Om det inte är löst, försök detta tredje steg

3) Kör bara detta kommando i din Windows-terminal. set NODE_OPTIONS=--max_old_space_size=4096

Relaterade artiklar