Knotenversion ist v0.11.13
Die Speichernutzung während des Absturzes steigt sudo top
nicht an3%
Code, der diesen Fehler reproduziert:
var request = require('request')
var nodedump = require('nodedump')
request.get("http://pubapi.cryptsy.com/api.php?method=marketdatav2",function(err,res)
{
var data
console.log( "Data received." );
data = JSON.parse(res.body)
console.log( "Data parsed." );
data = nodedump.dump(data)
console.log( "Data dumped." );
console.log( data )
})
Um zu überprüfen, ob dies ein Problem mit der Größe des Rekursionsstapels ist, habe ich den nächsten Code mit dem Parameter --stack-size = 60000 ausgeführt
var depth = 0;
(function recurse() {
// log at every 500 calls
(++depth % 500) || console.log(depth);
recurse();
})();
und haben
264500
Segmentation fault
Dann habe ich Code ausgeführt, der mir FATAL ERROR gibt: CALL_AND_RETRY_LAST Zuordnung fehlgeschlagen - Prozess mit dem gleichen Parameter --stack-size = 60000 nicht genügend Speicher und nicht vorhanden Segmentation fault
.
Ich schließe daraus, dass CALL_AND_RETRY_LAST
die Größe des Rekursionsstapels nichts gemeinsam hat.
Wie könnte ich dieses Problem lösen? Ich glaube, auf meinem Computer ist genügend freier Speicher vorhanden, um diese Aufgabe erfolgreich abzuschließen.
Es gibt ähnliche Fragen zum Stapelüberlauf, aber bei keiner dieser Fragen geht es darum CALL_AND_RETRY_LAST
, warum ich eine separate Frage erstellt habe.
Antworten:
Wenn Sie sich die Quelle ansehen : github / v8 , scheinen Sie zu versuchen, ein sehr großes Objekt zu reservieren. Nach meiner Erfahrung passiert es, wenn Sie versuchen, ein riesiges JSON-Objekt zu analysieren, aber wenn ich versuche, Ihre Ausgabe mit zu analysieren JSON und Node0.11.13, es funktioniert einfach gut.
Sie brauchen nicht mehr
--stack-size
, Sie brauchen mehr Speicher:--max_new_space_size
und / oder--max_old_space_size
.Der einzige Hinweis, den ich Ihnen daneben geben kann, ist, einen anderen JSON-Parser zu versuchen und / oder zu versuchen, das Eingabeformat in JSON-Zeile anstatt nur in JSON zu ändern.
quelle
Führen Sie vom Stammverzeichnis Ihres Projekts aus:
Dieses Tool fügt --max-old-space-size = 4096 in allen Knotenaufrufen in Ihren node_modules / .bin / * -Dateien an.
Node.js version> = 8 - DEPRECATION NOTICE
Seit NodeJs V8.0.0 ist es möglich, die Option zu verwenden
--max-old-space-size
. NODE_OPTIONS = Optionen ...quelle
export NODE_OPTIONS=--max_old_space_size=4096
hat den Trick für mich getan! Vielen Dank!Um dieses Problem zu beheben, müssen Sie Ihre Anwendung ausführen, indem Sie das Speicherlimit mithilfe der Option erhöhen
--max_old_space_size
. Standardmäßig beträgt das Speicherlimit von Node.js 512 MB.quelle
node --max_old_space_size=2000 server.js
node server.js
ehernpm start
. Wie kann ich das machen?Ich habe festgestellt, dass dies
max_new_space_size
in Knoten 4.1.1 keine Option ist undmax_old_space_size
allein mein Problem nicht gelöst hat. Ich füge meinem Shebang Folgendes hinzu und die Kombination dieser scheint zu funktionieren:[BEARBEITEN]: 4096 === 4 GB Arbeitsspeicher. Wenn auf Ihrem Gerät nur noch wenig Arbeitsspeicher vorhanden ist, möchten Sie möglicherweise eine kleinere Menge auswählen.
[UPDATE]: Dieser Fehler wurde auch beim Ausführen von grunt festgestellt, das zuvor wie folgt ausgeführt wurde:
Nach dem Aktualisieren des Befehls auf Folgendes traten keine Speicherfehler mehr auf:
quelle
Hinweis: Beachten Sie die Warnung in den Kommentaren, wie sich dies auf Elektronenanwendungen auswirken kann.
Ab Version 8.0, die im August 2017 ausgeliefert wurde, macht die Umgebungsvariable NODE_OPTIONS diese Konfiguration verfügbar (siehe NODE_OPTIONS ist in 8.x gelandet! ). Gemäß dem Artikel sind nur Optionen zulässig, die in der Quelle auf der Whitelist stehen (Hinweis: kein aktueller Link!), Einschließlich
"--max_old_space_size"
. Beachten Sie, dass der Titel dieses Artikels etwas irreführend erscheint - es scheint, dass NODE_OPTIONS bereits existiert hat, aber ich bin nicht sicher, ob diese Option verfügbar gemacht wurde.Also habe ich meine
.bashrc
:export NODE_OPTIONS=--max_old_space_size=4096
quelle
Das
increase-memory-limit
Modul ist jetzt veraltet. Ab Node.js v8.0 , das im August 2017 ausgeliefert wurde, können wir jetzt dieNODE_OPTIONS
env-Variable verwenden, um diemax_old_space_size
globale Einstellung festzulegen .Referenz-URL: https://github.com/endel/increase-memory-limit
quelle
cross-env
Modul global und führen Sie es mit einem solchen Befehl auf dem Terminal aus -cross-env PORT=8000 node --max-old-space-size=4096 server.js
Nur eine Variation der obigen Antworten.
Ich habe den obigen Befehl "Straight Up Node" erfolglos ausprobiert, aber der Vorschlag aus diesem Angular CLI-Problem hat bei mir funktioniert. Sie erstellen ein Knotenskript in Ihrer
package.json
Datei, um den für Node verfügbaren Speicher zu erhöhen, wenn Sie Ihren Produktionsbuild ausführen.Wenn Sie also den für Node verfügbaren Speicher auf 4 GB (
max-old-space-size=4096
) erhöhen möchten, lautet Ihr Node-Befehlnode --max-old-space-size=4096 ./node_modules/@angular/cli/bin/ng build --prod
. (Erhöhen oder verringern Sie die Speicherkapazität je nach Ihren Anforderungen - 4 GB haben bei mir funktioniert, aber Sie benötigen möglicherweise mehr oder weniger). Sie würden es dann wie folgt zu Ihrem package.json-Abschnitt "scripts" hinzufügen:"prod": "node --max-old-space-size=4096 ./node_modules/@angular/cli/bin/ng build --prod"
Es würde zusammen mit den anderen verfügbaren Skripten im Skriptobjekt enthalten sein - z. B.:
Und Sie führen es durch Aufrufen aus
npm run prod
(möglicherweise müssen Sie es ausführen,sudo npm run prod
wenn Sie einen Mac oder Linux verwenden).Beachten Sie, dass möglicherweise ein zugrunde liegendes Problem vorliegt, das dazu führt, dass Node mehr Speicher benötigt - dies wird in diesem Fall nicht behoben -, aber es gibt Node zumindest den Speicher, den es zum Ausführen des Builds benötigt.
quelle
Meine Arbeitslösung ist:
npm install --save-dev cross-env
odernpm install -g cross-env
.package.json
neues Build-Skript hinzufügen,z
... "build:prod:ios": "cross-env NODE_OPTIONS='--max-old-space-size=8192' ionic cordova build ios --prod --release" ...
Verwenden Sie diesen Befehl, um das nächste Mal zu erstellen.
npm run build:prod:ios
Problem gelöst.
quelle
Ich habe einige Tage mit diesem Problem verloren ... bis ich herausfand, dass ich in einer Datei eine statische Datei importierte, eine erstellte Datei. Es macht den Build nie zu Ende. Etwas wie:
Das Fixieren auf die reale Quelle löste das ganze Problem.
Meine Lösung teilen. :) :)
quelle
Ich habe dieses Problem gesehen, als ich ein Bundle für React-Native erstellt habe. Dinge, die ich versucht habe und die nicht funktionierten:
node --max_old_space_size
, intrestingly arbeitete für mich vor Ort aber nicht auf jenkins und ich bin sicher , dass immer noch nicht , was mit jenkins schief gehtDas hat bei mir funktioniert: Ich habe eine wirklich große Datei in den Code importiert. Ich habe es so gelöst, indem ich es in die
ignore
Liste aufgenommen.babelrc
habe:Es war eine
.js
Datei, die nicht wirklich transpiliert werden musste, und das Hinzufügen zur Ignorierliste hat geholfen.quelle
Dieser Fehler tritt auf, wenn der für die Ausführung zugewiesene erforderliche Speicher geringer ist als der für die Ausführung des Prozesses erforderliche Speicher. Standardmäßig beträgt die Knotenspeichergröße 512 MB. Um dies zu erhöhen, müssen Sie den folgenden Befehl eingeben:
quelle
Ich war mit diesem Problem in ionischer Hinsicht konfrontiert und habe viele Lösungen ausprobiert, dies jedoch durch Ausführen gelöst.
Für MAC: Knoten --max-old-space-size = 4096 / usr / local / bin / ionic cordova Build Android --prod
Für Windows: Knoten --max-old-space-size = 4096 / Benutzer / {Ihr Benutzer} / AppData / Roaming / npm / Knotenmodule / ionic / bin / ionic cordova build windows --prod
quelle
Speicherlimit erhöhen
ODER
C:\Users\{user_name}\AppData\Roaming\npm
--max_old_space_size=8192
zu demIF
undELSE
BlockJetzt sieht die Datei ng.cmd nach der Änderung folgendermaßen aus:
quelle
Führen Sie auf einem Windows-Computer den folgenden Befehl aus
quelle
Eine alternative Lösung besteht darin, den AOT-Compiler zu deaktivieren:
quelle
Wenn dieser Fehler bei Azure-Build-Pipelines auftritt, führen Sie den folgenden Schritt aus, um die Umgebungsvariable des Build-Agenten zu ändern
Fügen Sie ein
Azure build pipeline task
->Azure powershell script:Inlinescript
vor dem Kompilieren mit den folgenden Einstellungen hinzuquelle