2015-10-29 6 views
13

Gibt es eine Möglichkeit, GC-Läufe (zumindest die zeitaufwendigsten, wie GC-Interrupts in alten Speicherplatz) während der angegebenen Zeit explizit zu deaktivieren, während einige Code empfindlich auf Verzögerungen? Etwas wie dieses:Deaktivieren Sie die Garbage Collection für node.js für eine Weile

disableGc(); 
runCodeWithoutDelays(); 
enableGc(); 

Vermutlich einige Knotenoptionen oder native Module verwenden? Oder kann ich mein eigenes Modul schreiben, gibt es dafür eine API in V8?

+0

Hmmm, wird [this] (https://github.com/bnoordhuis/node-idle-gc) für Sie arbeiten? – thefourtheye

+0

Nicht wirklich. Dies löst nicht-inkrementelle GC-Hauptdurchläufe (Mark-Sweep-Kompakt) aus, die ziemlich schwer sind und im Vergleich zu schnellen inkrementellen Läufen zu langen Verzögerungen führen. Anstatt GC selbst laufen zu lassen, möchte ich GC für einige Zeit blockieren und wieder zum normalen Betrieb freigeben. – artch

+0

Ich würde empfehlen, diese Frage als Bug in Node.js Repo- und V8-Mailingliste zu stellen. – thefourtheye

Antwort

3

Soweit ich weiß, können Sie den Garbage Collector von v8 nicht manuell stoppen, das Einzige, was Sie tun können, ist den gc-Prozess manuell unter global.gc() starten, aber nicht v8 den Prozess zu stoppen.

0

Ein andere Person hatte die gleiche Frage und veröffentlichte ein Problem auf GitHub hier: https://github.com/nodejs/help/issues/462

Antwort ist, dass Sie die GC in Knoten nicht deaktivieren können, aber Sie können die Speicheroptionen mindestens zwicken Verfügung, um den max Raum zu nutzen und verzögern GC, indem Sie --max_old_space_size, --max-semi-space-size verwenden.

Ein Beispiel wird dort im Zusammenhang bereitgestellt.