2015-12-18 6 views
7

Beim Start des Servers exportieren 2GB (Ungefähr) Daten von mongodb zu redis, dann Fehler wie FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory erhalten.Wie nodejs Standardspeicher zu erhöhen?

Dann startete Server mit diesem Befehl node --max-old-space-size=4076 server.js und funktioniert gut. Es muss jedoch in nodejs application so konfiguriert werden, dass der Knotenserver immer mit 4 GB Arbeitsspeicher beginnt. Bitte helfen Sie mir, das zu beheben? Danke.

+0

nur aus Neugier, ist es etwas, das Sie setzen diese in einem npm Startskript stoppt? –

+0

Hallo James, ich bin ein Neuling zu Nodejs. kannst du mir bitte sagen, wo genau ich das behalten muss? Können Sie Beispielcode bereitstellen? Ich bin Ihnen sehr dankbar. – anil

+0

Ich habe eine Antwort mit ein paar weiteren Details gepostet, als ich in einem Kommentar hätte liefern können. Hoffe es hilft dir weiter. –

Antwort

0

Knoten SomeScript.js --max-old-Raum-size = 8192

+0

@M T Kopf: Danke – anil

12

eine Option: npm starten Skripte

https://docs.npmjs.com/misc/scripts

Diese werden auf Ihre package.json unter den "scripts" Abschnitt

{ 
    //other package.json stuff 

    "scripts":{ 
    "start": "node --max-old-space-size=4076 server.js" 
    } 

} 
hinzugefügt

dann npm start statt eingeben laufen rufen Knoten + Argumente + Ausführungspunkt.

Hinweis: Wenn Sie es etwas anderes als Start nennen, wird npm run [yourScriptNameHere] der Befehl, es zu laufen

Dies ist eine bessere Option als zu versuchen, Knoten neu zu konfigurieren 4gb standardmäßig zu verwenden (weiß nicht, selbst wenn sein möglich tbh). Es macht Ihre Konfiguration portierbar, indem Sie die eingebrannten Methoden so verwenden, wie sie sind, und ermöglicht anderen, die Ihren Code in der Zukunft sehen, zu verstehen, dass dies eine Notwendigkeit ist.

+0

gibt es eine Möglichkeit, es für alle Projekte dauerhaft zu ändern? –

+0

@InzamamMalik nicht, dass ich weiß - oder könnte auf einer schnellen Google-Suche finden. Ich glaube, das ist auch Absicht. Der ursprüngliche Post hatte einen Anwendungsfall, bei dem Daten von einem Endpunkt zum anderen übertragen werden konnten und nicht alle im Speicher zwischengespeichert wurden. Wenn Sie die Speicherbeschränkungen für Knoten (oder wirklich, v8) ständig überschreiben müssen, besteht wahrscheinlich ein Architekturproblem mit Ihrer Implementierung. Wenn Sie das Gefühl haben, dass Sie es für jeden Prozess benötigen, scheint das Startskript nicht so unbequem zu sein. –

Verwandte Themen