2011-04-09 17 views
11

Ecco cosa c'è che ho letto finora, e mi corregga se sbaglio:Node.js e V8 garbage collection

  1. Node.js è basato sul motore JavaScript V8.
  2. motore V8 JavaScript implementa stop-the-world garbage collection

Which..causes Node.js a volte completamente fermata per pochi secondi a qualche minuto per gestire la raccolta dei rifiuti.

Se questo è in esecuzione per il codice di produzione, sono pochi secondi per 10.000 utenti.

È davvero accettabile in ambiente di produzione?

risposta

12

Se è accettabile dipende dall'applicazione e dalle dimensioni dell'heap. Big Gc è di circa 1,3ms per Mbyte. YMMV. Circa la metà di un GC di compattazione. Circa 1 GC su 10 è grande. Circa 1 grande GC in 3 sta compattando. Usa il flag V8 --trace-gc per registrare i GC. Abbiamo fatto del lavoro per ridurre le pause. Nessuna promessa, nessun calendario. Vedi filiali/experimental/gc in repo V8.

+13

Questa risposta non è un po 'obsoleta. Il GC incrementale è atterrato e le lunghe pause dovrebbero essere un ricordo del passato. Se continui a vedere grandi pause GC, invia un bug e allega l'output di --trace-gc. Non possiamo fare promesse su come sistemare le cose, naturalmente, ma per carichi di lavoro normali ci aspetteremmo un limite superiore alle pause intorno a 40-50ms, o intorno a 4ms se si usa il --max-new-space-size = 1024 - -le bandiere non compatte. –