Müllsammler in Node.js

8

Laut Google verwendet V8 eine effiziente Speicherbereinigung, indem es einen "stop-the-world, generational, accurate, garbage collector" einsetzt. Teil des Anspruchs ist, dass der V8 die Programmausführung stoppt, wenn er einen Speicherbereinigungszyklus ausführt.

Eine offensichtliche Frage ist, wie können Sie einen effizienten GC haben, wenn Sie die Programmausführung anhalten?

Ich habe versucht, mehr zu diesem Thema zu finden, denn ich würde gerne wissen, wie sich der GC auf die Reaktionszeit auswirkt, wenn Sie möglicherweise mehrere zehntausend Anfragen pro Sekunde auf Ihren node.js-Server richten.

Jede Expertenhilfe, persönliche Erfahrung oder Links wären sehr willkommen

Danke

    
Nostradamus 11.03.2013, 08:32
quelle

1 Antwort

12

"Effizient" kann mehrere Dinge bedeuten. Hier bezieht es sich wahrscheinlich auf einen hohen Durchsatz . Wenn Sie sich die Reaktionszeit ansehen, interessieren Sie sich eher für Latenz , was in der Tat schlimmer sein könnte als bei alternativen GC-Strategien.

Die wichtigsten Alternativen zu Stop-the-World GCs sind

  • inkrementelle GCs, die einen Sammlungszyklus nicht beenden müssen, bevor die Kontrolle temporär an den Mutator 1 zurückgegeben wird, und
  • gleichzeitige GCs, die gleichzeitig als Mutator fungieren und diesen nur sehr kurz unterbrechen (z. B. um den Stack zu scannen).

Beide müssen zusätzliche Arbeit ausführen, um angesichts der gleichzeitigen Änderung des Heapspeichers korrekt zu sein (z. B. wenn ein neues Objekt erstellt und an ein bereits gescanntes Objekt angehängt wird, muss diese neue Referenz beachtet werden). Dies beeinflusst den Gesamtdurchsatz, d. H. Es dauert länger, den gesamten Haufen tatsächlich zu reinigen. Der Vorteil ist, dass sie (wenn überhaupt) das Programm nicht (sehr) sehr lange unterbrechen, so dass die Latenz gering ist (äh).

Obwohl die V8-Dokumentation immer noch einen Stop-the-world-Sammler erwähnt, scheint es, dass die V8 GC ist seit 2011 inkrementell . Obwohl es die Programmausführung hin und wieder stoppt, tut es nicht 2 Stoppen Sie das Programm so lange, bis der gesamte Heap gescannt ist. Stattdessen kann es beispielsweise nach einigen Millisekunden suchen und das Programm fortsetzen.

1 "Mutator" ist die GC-Terminologie für das Programm, dessen Heap Speicherbereinigung ist.

2 Das ist zumindest im Prinzip wahrscheinlich konfigurierbar.

    
delnan 11.03.2013, 14:22
quelle

Tags und Links