Heute habe ich mein Skript für die Dateisystemindizierung ausgeführt, um den RAID-Dateiindex zu aktualisieren, und nach 4 Stunden stürzte es mit folgendem Fehler ab:
[md5:] 241613/241627 97.5%
[md5:] 241614/241627 97.5%
[md5:] 241625/241627 98.1%
Creating missing list... (79570 files missing)
Creating new files list... (241627 new files)
<--- Last few GCs --->
11629672 ms: Mark-sweep 1174.6 (1426.5) -> 1172.4 (1418.3) MB, 659.9 / 0 ms [allocation failure] [GC in old space requested].
11630371 ms: Mark-sweep 1172.4 (1418.3) -> 1172.4 (1411.3) MB, 698.9 / 0 ms [allocation failure] [GC in old space requested].
11631105 ms: Mark-sweep 1172.4 (1411.3) -> 1172.4 (1389.3) MB, 733.5 / 0 ms [last resort gc].
11631778 ms: Mark-sweep 1172.4 (1389.3) -> 1172.4 (1368.3) MB, 673.6 / 0 ms [last resort gc].
<--- JS stacktrace --->
==== JS stack trace =========================================
Security context: 0x3d1d329c9e59 <JS Object>
1: SparseJoinWithSeparatorJS(aka SparseJoinWithSeparatorJS) [native array.js:~84] [pc=0x3629ef689ad0] (this=0x3d1d32904189 <undefined>,w=0x2b690ce91071 <JS Array[241627]>,L=241627,M=0x3d1d329b4a11 <JS Function ConvertToString (SharedFunctionInfo 0x3d1d3294ef79)>,N=0x7c953bf4d49 <String[4]\: ,\n >)
2: Join(aka Join) [native array.js:143] [pc=0x3629ef616696] (this=0x3d1d32904189 <undefin...
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
1: node::Abort() [/usr/bin/node]
2: 0xe2c5fc [/usr/bin/node]
3: v8::Utils::ReportApiFailure(char const*, char const*) [/usr/bin/node]
4: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [/usr/bin/node]
5: v8::internal::Factory::NewRawTwoByteString(int, v8::internal::PretenureFlag) [/usr/bin/node]
6: v8::internal::Runtime_SparseJoinWithSeparator(int, v8::internal::Object**, v8::internal::Isolate*) [/usr/bin/node]
7: 0x3629ef50961b
Der Server ist mit 16 GB RAM und 24 GB SSD-Swap ausgestattet. Ich bezweifle sehr, dass mein Skript mehr als 36 GB Speicherplatz hat. Zumindest sollte es nicht
Das Skript erstellt einen Index von Dateien, die als Array von Objekten mit Dateimetadaten gespeichert sind (Änderungsdaten, Berechtigungen usw., keine großen Datenmengen).
Hier ist der vollständige Skriptcode: http://pastebin.com/mjaD76c3
Ich habe in der Vergangenheit bereits seltsame Knotenprobleme mit diesem Skript erlebt, was mich z. Teilen Sie den Index in mehrere Dateien auf, da der Knoten bei der Arbeit an so großen Dateien wie String fehlerhaft war. Gibt es eine Möglichkeit, die Speicherverwaltung von nodejs mit riesigen Datenmengen zu verbessern?
ng serve
oder verteilen Sie das Ergebnis desng build
Ordners / dist von einem anderen Webserver wie Express? Wenn Ihr Angular-Projekt jedoch mehr als den Standardspeicher von 1,7 GB verwendet, haben Sie möglicherweise ein Architekturproblem in Ihrer Anwendung? Es sieht so aus, als ob Sie die Entwicklungsumgebung mit nmp start verwenden. Vielleicht ist dies eine Lösung dafür. Github.com/mgechev/angular-seed/issues/2063Nur für den Fall, dass jemand in einer Umgebung darauf stößt, in der er die Knoteneigenschaften nicht direkt festlegen kann (in meinem Fall ein Build-Tool):
Sie können die Knotenoptionen mithilfe einer Umgebungsvariablen festlegen, wenn Sie sie nicht in der Befehlszeile übergeben können.
quelle
Wenn Sie die Speichernutzung des Knotens global erhöhen möchten - nicht nur ein einzelnes Skript -, können Sie Umgebungsvariablen wie folgt exportieren:
export NODE_OPTIONS=--max_old_space_size=4096
Dann müssen Sie nicht mit Dateien spielen, wenn Sie Builds wie ausführen
npm run build
.quelle
Ich habe dieses Problem beim Debuggen mit VSCode festgestellt. Ich wollte nur hinzufügen, dass Sie das Argument auf diese Weise zu Ihrem Debug-Setup hinzufügen können.
Sie können es der
runtimeArgs
Eigenschaft Ihrer Konfiguration in hinzufügenlaunch.json
.Siehe Beispiel unten.
quelle
Im Folgenden finden Sie einige Flag-Werte, mit denen Sie zusätzliche Informationen dazu hinzufügen können, wie Sie beim Starten Ihres Knotenservers mehr Speicher zulassen.
1 GB - 8 GB
quelle
Ich hatte damit zu kämpfen, selbst nachdem ich --max-old-space-size eingestellt hatte.
Dann wurde mir klar, dass ich Optionen - max-old-space-size - vor das Karma-Skript stellen muss.
Geben Sie am besten beide Syntaxen an: - max-old-space-size und --max_old_space_size. Mein Skript für Karma:
Referenz https://github.com/angular/angular-cli/issues/1652
quelle
--max-old-space-size=8192 --optimize-for-size --max_old_space_size=8192 --optimize_for_size
und es funktionierteIch hatte ein ähnliches Problem beim AOT-Winkelbau. Die folgenden Befehle haben mir geholfen.
Quelle: https://geeklearning.io/angular-aot-webpack-memory-trick/
quelle
sudo npm -g install increase-memory-limit --unsafe-perm
fwiw, das Finden und Reparieren eines Gedächtnisschweins mit so etwas wie memwatch könnte helfen.
quelle
%appdata%
die Eingabetaste ein%appdata%
Ordner> npmng.cmd
in Ihrem bevorzugten Editor--max_old_space_size=8192
zum IF und ELSE - BlockIhre
node.cmd
Datei sieht nach der Änderung folgendermaßen aus:quelle
Die folgende Umgebungsvariable kann verwendet werden:
Noch ein Hinweis:
console.log()
verbraucht auch Speicher im Terminal.Ich habe gerade versucht, die console.log () auf dem Terminal zu kommentieren. denn das wird auch Speicher brauchen.
quelle
NODE_OPTIONS= --max-old-space-size=somesize
Wenn Sie den Speicher für Knoten (Fenster) global ändern möchten, gehen Sie zu Erweiterte Systemeinstellungen -> Umgebungsvariablen -> Neue Benutzervariable
quelle
Ich habe versucht, "den folgenden Code und es funktioniert gut".
Führen Sie den Befehl cmd aus, um eine neue Größe festzulegen.
Oder Sie können den Link für weitere Informationen überprüfen https://github.com/nodejs/node/issues/10137#issuecomment-487255987
quelle
Ich möchte nur hinzufügen, dass es in einigen Systemen
--max-old-space-size
nicht ausreicht , das Knotenspeicherlimit zu erhöhen , und dass ein Betriebssystemfehler wie der folgende vorliegt:In diesem Fall liegt dies wahrscheinlich daran, dass Sie die maximale mmap pro Prozess erreicht haben.
Sie können die max_map_count überprüfen, indem Sie ausführen
und erhöhen Sie es durch Laufen
und beheben Sie es, dass es nach einem Neustart nicht zurückgesetzt wird, indem Sie diese Zeile hinzufügen
in
/etc/sysctl.conf
Datei.Überprüfen Sie hier für weitere Informationen.
Eine gute Methode zur Analyse des Fehlers besteht darin, den Prozess mit auszuführen
strace
quelle
Ich habe vor kurzem das gleiche Problem gehabt und bin auf diesen Thread gestoßen, aber mein Problem war mit der
React
App. Die folgenden Änderungen im Befehl zum Starten des Knotens haben meine Probleme behoben.Syntax
Beispiel
Warum ist die Größe 16000 in der Größe des maximalen alten Raums?
Grundsätzlich hängt dies vom zugewiesenen Speicher für diesen Thread und Ihren Knoteneinstellungen ab.
Wie überprüfe und gebe ich die richtige Größe an?
Dies ist im Grunde in unserem Motor bleiben
v8
. Der folgende Code hilft Ihnen dabei, die Heap-Größe Ihrer lokalen Knoten-v8-Engine zu verstehen.quelle
Ich hatte gerade das gleiche Problem mit meiner EC2-Instanz t2.micro, die 1 GB Speicher hat.
Ich habe das Problem behoben, indem ich eine Auslagerungsdatei mit dieser URL erstellt und die folgende Umgebungsvariable festgelegt habe.
export NODE_OPTIONS=--max_old_space_size=4096
Endlich ist das Problem weg.
Ich hoffe das wäre hilfreich für die Zukunft.
quelle
Nur für den Fall, dass es Menschen mit diesem Problem bei der Verwendung von NodeJS-Apps helfen kann, die eine hohe Protokollierung verursachen, hat ein Kollege dieses Problem gelöst, indem er die Standardausgabe (n) an eine Datei weitergeleitet hat.
quelle
Wenn Sie versuchen, nicht sich
node
selbst, sondern eine andere Software zu starten ,webpack
können Sie beispielsweise die Umgebungsvariable und das Umgebungspaket verwendencross-env
:quelle
Für die eckige Projektbündelung habe ich meiner pakage.json- Datei im Abschnitt " Skripte" die folgende Zeile hinzugefügt .
Um meinen Code zu bündeln, verwende ich
npm run build-prod
stattdessen anstelle vonng build --requiredFlagsHere
hoffe das hilft!
quelle
Aktualisieren Sie den Knoten auf die neueste Version. Ich war mit diesem Fehler auf Knoten 6.6 und habe auf 8.9.4 aktualisiert, und das Problem ist behoben.
quelle
In meinem Fall hatte ich eine
npm install
frühere Version des Knotens ausgeführt. Nach einem Tag habe ich die Knotenversion und den RAMnpm install
für einige Module aktualisiert . Danach bekam ich diesen Fehler. Um dieses Problem zu beheben, habe ich den Ordner node_module aus jedem Projekt gelöscht und ausgeführtnpm install
erneut ausgeführt.Hoffe, dies könnte das Problem beheben.
Hinweis: Dies geschah auf meinem lokalen Computer und wurde nur auf dem lokalen Computer behoben.
quelle
Dieser Befehl funktioniert einwandfrei. Ich habe 8 GB RAM in meinem Laptop, also habe ich Größe = 8192 eingestellt. Es dreht sich alles um RAM und außerdem müssen Sie den Dateinamen festlegen. Ich führe den Befehl npm run build aus , deshalb habe ich build.js verwendet .
quelle
In meinem Fall habe ich die Version von node.js auf die neueste Version aktualisiert und es hat wie ein Zauber funktioniert.
quelle