FATAL ERROR: Ineffektive Mark-Compacts nahe der Heap-Grenze Zuweisung fehlgeschlagen - JavaScript-Heap in Ionic 3 nicht genügend Speicher


Antworten:


136

Für eine nicht eckige allgemeine Antwort für diejenigen, die auf dieser Frage von Google landen:

Jedes Mal, wenn Sie auf diesen Fehler stoßen, liegt dies wahrscheinlich an einem Speicherverlust oder einem Unterschied zwischen der Verwaltung des Speichers durch Knoten <= 10 und Knoten> 10. Normalerweise kann Ihr Programm nur durch Erhöhen des dem Knoten zugewiesenen Speichers ausgeführt werden, löst jedoch möglicherweise nicht das eigentliche Problem, und der vom Knotenprozess verwendete Speicher kann den von Ihnen zugewiesenen neuen Speicher immer noch überschreiten. Ich würde empfehlen, die Speichernutzung in Ihrem Knotenprozess zu profilieren, wenn er ausgeführt wird oder auf Knoten> 10 aktualisiert wird.

Ich hatte ein Speicherleck. Hier ist ein großartiger Artikel zum Debuggen von Speicherlecks im Knoten.

Um den Speicher in dem Terminal zu vergrößern, in dem Sie Ihren Knotenprozess ausführen:

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

wo Werte von sein max-old-space-sizekönnen: [2048, 4096, 8192, 16384]etc.

[UPDATE] Weitere Beispiele für weitere Klarheit:

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

# and so on...

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

# 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.

14
Danke, sollte beachtet werden 8192 bedeutet 8 GB.
jaggedsoft

11
Zu Ihrer Information, der Standardwert ist 512 MB. Sie müssen nicht direkt auf das 10-fache dieses Betrags springen, sondern können zuerst etwas zwischen 512 und 5120 ausprobieren.
Cameron Hudson

Vielen Dank, dass dies für alle Arten von Anwendungen mit Speicherproblemen funktioniert.
invinciblemuffi

4
Ich möchte nur darauf hinweisen - das ist nicht immer ein Hinweis auf einen Speicherverlust. Möglicherweise verwendet eine von Ihnen verwendete Bibliothek etwas mehr Speicher als früher. Für uns next.jsbegann unsere App mit der Schnellaktualisierungsfunktion zum Absturz zu bringen.
Daniel Cooke

62

Beheben Sie in meinem Fall dieses Problem bei der Installation von NodeJs, Version 12.10.0


1
Hier gilt das gleiche. Ich habe gerade die Version und ihre Werke geändert.
Brunocascio

9
Für den Kontext hat Knoten 12 eine andere Heap-Verwaltungsstrategie, die auf dem verfügbaren Speicher basiert, anstatt Standardeinstellungen zu verwenden. Weitere Details hier: Foundation.nodejs.org/announcements/2019/04/24/…
Derek Dowling

Nichts anderes hat bei mir funktioniert, das war es. Vielen Dank :)
Hussain Alaidarous

Wir haben auf Knoten 12 aktualisiert und der Fehler ist
verschwunden

1
@DerekDowling Wayback Ursache Link unterbrochen: web.archive.org/web/20191103115941/https://…
Grimmiger

61

das gleiche Problem auf Centos Server 7, aber dies löste mein Problem:

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

Wo X = (2048 or 4096 or 8192 o..)ist der Wert des Gedächtnisses?


2
nach dem Ändern des Wertes von x .. Fehler bleibt gleich
Sohail Ahmad

Wenn der Fehler weiterhin auftritt, erhöhen Sie die Größe so lange, bis genügend Speicher für die Verarbeitung vorhanden ist, um den Fehler schließlich zu verhindern. Das einzige Mal, dass ich diesen Fehler nicht überwinden konnte, war mit ng serveund eine massive .js-Datei, auf die im scriptsAbschnitt verwiesen wird, musste in den angular.jsonSpeicher geladen werden.
Atconway

Kann ich den Wert von X größer als 8192 einstellen? Ich habe 32 GB RAM
Diego

Für mich hat die Angabe der maximalen Größe des alten Speicherplatzes in der Befehlszeile NICHT funktioniert. Dies kann eine Interaktion mit NVV-basierten Knoten sein? Stattdessen habe ich in einem Bash-Skript 'NODE_OPTIONS = "- max-old-space-size = 2048" verwendet. Der Knoten $ NG build --prod --progress = false hat funktioniert, im Gegensatz zu' node --max-old -space-size = 2048 $ NG build --prod --progress = false ', was nicht der Fall war. Ich weiß immer noch nicht warum.
Simon H


20

Ich habe den gleichen Fehler erhalten, wenn ich einen ng buildBefehl in Visual Studio-Code ausführe . Ich kann jedoch erfolgreich erstellen, wenn ich dasselbe in der Windows-Befehlszeile in der folgenden Reihenfolge ausführe.

Schritt 1.

set NODE_OPTIONS=--max_old_space_size=4096

Schritt 2.

ng build

10

Ich habe die gleiche Fehlermeldung erhalten, wenn ich die folgenden Anweisungen im Visual Studio-Code ausführe. Aber ich kann erfolgreich erstellen, wenn ich dasselbe in der Windows-Befehlszeile ausführe.

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

7
node --max_old_space_size=4096 node_modules/@angular/cli/bin/ng build --baseHref=/baseUrl/ --prod=true

20
Während dieser Code die Frage möglicherweise beantwortet, verbessert die Bereitstellung eines zusätzlichen Kontexts darüber, warum und / oder wie dieser Code die Frage beantwortet, ihren langfristigen Wert.
Eric Leschinski

7

Aus einigen Gründen hat die obige Antwort für mich nicht wirklich funktioniert. Ich habe Folgendes getan, um mein Problem zu beheben:

  1. Ich musste zuerst den node_modulesOrdner löschen
  2. Installieren Sie node.js erneut auf meinem PC und
  3. dann npm install

Schritt 2 ist nicht obligatorisch. Ich habe die obere Lösung ausprobiert und sie hat auch ohne Schritt 2 funktioniert
Analyst

5

node --max_old_space_size = 4096 ./node_modules/@angular/cli/bin/ng build --prod --build-optimizer

Durch Hinzufügen von Parametern wurde --build-optimizer das Problem in meinem Fall behoben.

Aktualisieren:

Ich bin nicht sicher, warum nur das Hinzufügen von --build-optimizer das Problem löst, aber gemäß eckigen Dokumenten sollte es mit aktiviertem aot verwendet werden, daher sollte der aktualisierte Befehl wie folgt aussehen

--build-optimizer=true --aot=true

Angular Build-Dokumente


4

Führen Sie diesen Befehl in Ihrem Projektordner aus. Verwenden Sie Serve anstelle von Build

node --max_old_space_size=8000 node_modules/@angular/cli/bin/ng serve  --prod --port=4202

4

Ersetzen Sie die Leitung

"start": "ng serve -o --port 4300 --configuration=en" mit

"start": "node --max_old_space_size=5096 node_modules/@angular/cli/bin/ng serve -o --port 4300 --configuration=en"

HINWEIS:

  1. Port - 4300 ist nicht konstant. Dies hängt davon ab, welchen Port Sie auswählen.

  2. --max_old_space_size = 5096 zu nicht konstant; ein beliebiger Wert 1024,2048,4096 usw.


4

In meinem Fall war es eine Rekursion , die dazu führte, dass die Reaktion den gesamten Speicher verbrauchte.

Dies geschah, als ich meinen Code überarbeitete und dies nicht bemerkte.

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

In anderen Knoten-Apps könnte dies folgendermaßen aussehen:

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

Warum war das ein Problem? <> </> sollte in React gültig sein, anstatt <React.Fragment> zu verwenden, oder?
Joelgullander

@Codehiker Ja, es ist eine neue Syntax in React 16
GoalsAndGambles

1
Die Rekursion SumComponententhält einen SumComponent(der einen SumComponententhält, der einen SumComponent... enthält )
Stein

3

Für mich war es ein Problem mit dem Firebase-Paket.

Fügen Sie nur "@ firebase / database" hinzu: "0.2.1", installieren Sie für Ihre package.json node_modules neu und funktionieren.


2

Ich habe das vorhandene Knotenmodul gelöscht und die folgenden Befehle ausgeführt, um mein Problem zu beheben

npm install -all
npm audit fix

2

Eine weitere nicht eckige Antwort (ich hatte das gleiche Problem beim Erstellen einer Reaktions-App auf AWS Amplify).

Wie von Emmanuel erwähnt, scheint dies auf den Unterschied in der Art und Weise zurückzuführen zu sein, wie der Speicher von Knoten v10 gegenüber Knoten v12 behandelt wird.

Ich habe erfolglos versucht, das Gedächtnis zu vergrößern. Aber mit Knoten v12 hat es geschafft.

Überprüfen Sie, wie Sie nvm use $VERSION_NODE_12Ihre Build-Einstellungen wie unter @atlesp erläutert hier hinzufügen können: https://github.com/aws-amplify/amplify-console/issues/440#issuecomment-602626451 Bild


1

Für mich bestand das Problem darin, einen zusätzlichen node_modulesOrdner zu haben, in den ich umbenannt habe, node_modules_oldund einen auszuführen npm install, um einen neuen zu generieren node_modules. Irgendwie muss der Build den node_modules_oldOrdner noch aufgenommen haben, also habe ich node_modules_olddas Verzeichnis verlassen, um das Problem zu beheben.


1

Bitte überprüfen Sie Ihre Knotenversion:

   $  node -v

Wenn es sich um 10.1.1 handelt, müssen Sie die Version Ihres Root-Knotens über die folgenden Befehle aktualisieren

$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash


$ source ~/.nvm/nvm.sh

$ nvm ls

$ nvm install 12.18.1

Sobald dies erledigt ist, starten Sie bitte Ihr Terminal oder Visual Studio neu.

Es ist Arbeit 100 $

Für ionische Benutzer fügen Sie bitte den folgenden Code in Ihre package.json ein für ionische Benutzer

 "ionic:build": "node --max-old-space-size=16384 ./node_modules/@ionic/app-scripts/bin/ionic-app-scripts.js build",
    


Eigentlich funktioniert das, wenn Sie Web app-scriptserstellen, aber wenn Sie Android oder Skript ionic cordova build androidwie bauen?
Muhammed Moussa

0

Überprüfen Sie Ihren Ordnernamen. Wenn Ihr Ordnername Leerzeichen enthält, werden diese Probleme generiert. Ohne Leerzeichen umbenennen. hoffe es wird funktionieren


0

Wenn dies beim Ausführen der React-Anwendung auf VSCode passiert, überprüfen Sie bitte Ihre propTypes. Undefinierte Proptypes führen zu demselben Problem.


0

Bei mir ist dieser Fehler aufgetreten, weil ich den Zugriff auf den Ausgabepfad für den dist-Ordner in meiner Datei angle.json verloren habe. Nachdem ich mich mit aktualisierten Anmeldeinformationen wieder mit dem Remote-Pfad verbunden hatte, verschwand der Fehler.


0

#! / usr / bin / env-Knoten --max-old-space-size = 4096 in der Funktion ionic-app-scripts.js

Ändern

node_modules / .bin / ionic-app-scripts.cmd

Beim Hinzufügen:

@IF EXIST "% ~ dp0 \ node.exe" ("% ~ dp0 \ node.exe" "% ~ dp0 .. @ ionic \ app-scripts \ bin \ ionic-app-scripts.js"% *) ELSE ( @SETLOCAL @SET PATHEXT =% PATHEXT:;. JS; =;% node --max_old_space_size = 4096 "% ~ dp0 .. @ ionic \ app-scripts \ bin \ ionic-app-scripts.js"% *)

Arbeitete fianlly


0

Für mich stieß ich auf dieses Problem, als ich eslint und Prettier Fix ausführte und mit einem buildVerzeichnis in meinem React-Projekt formatierte , nachdem ich alles entfernt hatte. Ich denke, das liegt daran, dass es zu viele Dateien gibt.


0

Ich denke, es gibt viele Möglichkeiten, um diesen Fehler zu erreichen!

Auf meiner Seite hatte ich eine Schleife in meiner package.json. Projekt A hatte eine Abhängigkeit von Projekt B, das eine Abhängigkeit von Projekt A hatte.


0

Manchmal ist Einfachheit der Schlüssel zum Erfolg. Suchen Sie nach, while (i <= 10000) {}ohne iIhren Code zu erhöhen ;)


0

Dieses Problem wurde behoben, nachdem ich alle Bibliotheken wie NodeJS, Typoskript, Garn, Npm usw. für mein Projekt aktualisiert habe.


0

Geben Sie dies einfach in das Terminal ein:

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.