Ich habe einige Probleme zu verstehen, wie sich Node.js basierend auf dem Parameter verhält max-old-space-size
.
In meinem Fall t2.small
führe ich beispielsweise zwei AWS-Instanzen aus (2 GB RAM).
Ich weiß nicht warum, aber ich habe eingestellt max-old-space-size=4096
(4 GB). Was macht der Knoten in diesem Fall? Könnte diese Konfiguration zu einem möglichen Speicherzuordnungsfehler führen?
Wie bestimme ich den korrekten Wert max-old-space-size
basierend auf den Serverressourcen?
Meine Anwendung erhöht ständig die Speichernutzung und ich versuche, alles über Knoteninternale zu verstehen.
Antworten:
"Alter Speicherplatz" ist der größte und am besten konfigurierbare Abschnitt des von V8 verwalteten (auch als Müll gesammelten) Heaps (dh wo sich die JavaScript-Objekte befinden), und das
--max-old-space-size
Flag steuert seine maximale Größe. Wenn sich der Speicherverbrauch dem Limit nähert, wird V8 mehr Zeit für die Speicherbereinigung aufwenden, um nicht verwendeten Speicher freizugeben.Wenn der Heap-Speicherverbrauch (dh Live-Objekte, die der GC nicht freigeben kann) den Grenzwert überschreitet, stürzt V8 Ihren Prozess ab (mangels Alternative), sodass Sie ihn nicht zu niedrig einstellen möchten. Wenn Sie es zu hoch einstellen, kann die zusätzliche Heap-Nutzung, die V8 zulässt, dazu führen, dass Ihrem Gesamtsystem der Speicher ausgeht (und zufällige Prozesse entweder ausgetauscht oder abgebrochen werden, da keine Alternative vorhanden ist).
Zusammenfassend würde ich auf einem Computer mit 2 GB Speicher wahrscheinlich
--max-old-space-size
etwa 1,5 GB einstellen , um Speicher für andere Zwecke zu belassen und ein Austauschen zu vermeiden.quelle
d8 --help
:--max-old-space-size (max size of the old space (in Mbytes))
2020 Update
Diese Optionen werden jetzt offiziell nach Knoten dokumentiert . Für einen 2-GB-Computer sollten Sie wahrscheinlich Folgendes verwenden:
NODE_OPTIONS=--max-old-space-size=1536
So bestimmen Sie die zu verwendende Menge : Sie können den verfügbaren Speicher auf einem Linux-Computer mithilfe von anzeigen
free -m
. Beachten Sie, dass Sie denfree
und denbuffers/cache
Speicher zusammen verwenden können, dabuffers/cache
er weggeworfen werden kann (diese Puffer und der Cache sind eine gute Möglichkeit, ansonsten nicht verwendeten Speicher zu verwenden).Beachten Sie die offizielle Dokumentation für
max-old-space-size
auch Erwähnungen:Daher der obige Wert. Bedenken Sie, dass sich die für das Basisbetriebssystem benötigte Speichermenge nicht wesentlich ändert, sodass Sie auf einem 4-GB-Computer usw. problemlos 3.5 ausführen können.
quelle
Dieser Fehler tritt auf, wenn der für die ausführende Anwendung zugewiesene Speicher kleiner als der erforderliche Speicher ist. Standardmäßig beträgt das Speicherlimit in Node.js 512 MB. Um diesen Betrag zu erhöhen, müssen Sie das Argument für das Speicherlimit festlegen
—-max-old-space-size
. Dies hilft, ein Problem mit dem Speicherlimit zu vermeiden.node --max-old-space-size=1024 index.js #increase to 1gb node --max-old-space-size=2048 index.js #increase to 2gb node --max-old-space-size=3072 index.js #increase to 3gb node --max-old-space-size=4096 index.js #increase to 4gb node --max-old-space-size=5120 index.js #increase to 5gb node --max-old-space-size=6144 index.js #increase to 6gb node --max-old-space-size=7168 index.js #increase to 7gb node --max-old-space-size=8192 index.js #increase to 8gb
https://medium.com/@vuongtran/how-to-solve-process-out-of-memory-in-node-js-5f0de8f8464c
quelle
node --v8-options
) sehen, dass der gemeldete Standardwert 4096 ist und ohne Einstellungmax-old-space-size
der Testsuite, die ich verwende, problemlos bis zu 1,5 GB zugewiesen werden. Der verlinkte mittlere Artikel stammt aus dem Jahr 2016, daher ist es wahrscheinlich, dass sich die Dinge seit seiner Veröffentlichung weiterentwickelt haben.node -e "console.log(`node heap limit = ${require('v8').getHeapStatistics().heap_size_limit / (1024 * 1024)} Mb`)"
-> v12.18.0 und v14.3.0 -> 2096 MB, v10.20.1 -> 1432 MBheap_size_limit
. Für eine normale UNIX-Shell muss anders angegeben werden:node -e 'console.log(`node heap limit = ${require("v8").getHeapStatistics().heap_size_limit / (1024 * 1024)} Mb`)'
Wenn Sie nur möchten, dass es von dem Projekt aus funktioniert, an dem Sie arbeiten, gehen Sie folgendermaßen vor:
In Ihrem Projekt cd to node_module / @ angle cd node_module / @ angle
Führen Sie nun den folgenden Befehl export export NODE_OPTIONS = - max-old-space-size = 8192 aus
quelle