An vielen Stellen im Web werden Sie sehen:
Was ist das Speicherlimit für einen Knotenprozess?
und die Antwort:
Derzeit hat V8 standardmäßig ein Speicherlimit von 512 MB auf 32-Bit-Systemen und 1 GB auf 64-Bit-Systemen. Das Limit kann angehoben werden, indem --max-old-space-size auf maximal ~ 1 GB (32 Bit) und ~ 1,7 GB (64 Bit) festgelegt wird. Es wird jedoch empfohlen, den einzelnen Prozess in mehrere Worker aufzuteilen wenn Sie Speichergrenzen erreichen.
Kann jemand bestätigen, dass dies der Fall ist, da Node.js häufig aktualisiert wird?
Und was noch wichtiger ist: Wird dies in naher Zukunft der Fall sein?
Ich möchte JavaScript-Code schreiben, der möglicherweise mit 4 GB Javascript-Objekten umgehen muss (und Geschwindigkeit ist möglicherweise kein Problem).
Wenn ich es in Node nicht machen kann, werde ich es in Java (auf einem 64-Bit-Computer) machen, aber ich würde es lieber nicht tun.
quelle
Antworten:
Dies war für einige, die Node.js verwenden, ein großes Problem, und es gibt gute Nachrichten. Das neue Speicherlimit für V8 ist jetzt unbekannt (nicht getestet) für 64-Bit und wird auf 32-Bit-Adressraum in 32-Bit-Umgebungen angehoben.
Lesen Sie hier mehr: http://code.google.com/p/v8/issues/detail?id=847
quelle
Starten der nodejs-App mit einem Heap-Speicher von 8 GB
node --max-old-space-size=8192 app.js
Siehe Dokumentation zu den Befehlszeilenoptionen des Knotens oder führen Sie Folgendes aus:
quelle
Ich führe jetzt einen Prozess unter Ubuntu Linux aus, der einen bestimmten Speicherverlust aufweist und der Knoten 0.6.0 8 GB überträgt. Denke, es wird gehandhabt :).
quelle
Sieht aus wie ein wahrer. Als ich versucht hatte, 50 Mb String im Puffer zuzuweisen,
var buf = new Buffer(50*1024*1024);
bekam ich einen schwerwiegenden FehlerFATAL ERROR: CALL_AND_RETRY_2 Allocation failed - process out of memory
. Ich habe eine Speicherauslastung von ca. 457 MB im Prozessmonitor behoben.quelle
Node.js erzwingt absichtlich eine Microservice-Architektur.
Wenn Sie dies nicht gesehen haben, sollten Sie sich diesen Vortrag von Ryan Dahl ansehen . Dies war im Jahr 2011, als er Node.js der Welt vorstellte. Das gesamte Gespräch ist sehr interaktiv. Und am Ende versucht er, ein Konzept zu erklären, das sehr vertraut klingt:
Der Begriff "Microservice" wurde erst 2 Monate später in einer Werkstatt in Venedig geprägt. Aber wenn man jetzt zurückblickt, ist es offensichtlich, was er zu erklären versucht. Es gab einfach noch kein Wort dafür.
Und die meisten dieser Speicherbeschränkungen sind kein Problem, wenn wir uns die Zeit nehmen, unsere Anwendungen in kleinere Mikrodienste aufzuteilen.
Node.js hat alle Grundlagen für eine superschnelle rohe TCP- oder HTTP-Kommunikation, aber Ryan betont in diesem Video auch, dass Node.js selbst kein HTTP-Server ist. Es gibt jedoch Node.js Frameworks und Bibliotheken, die sich auf diese Dinge spezialisiert haben.
Sobald Sie diesen Punkt erreicht haben, ist es meines Erachtens an der Zeit, sich das NestJS-Framework anzusehen, das einige integrierte Microservice-Funktionen enthält.
quelle
Der maximale Speicherlimitwert beträgt 3049 für 32-Bit-Benutzer
Wenn Sie Node.js mit
os.arch() === 'ia32'
true ausführen, können Sie maximal 3049 festlegenSiehe: https://github.com/TypeStrong/ts-node/issues/261#issuecomment-402093879
quelle