2015-04-28 19 views
22

Provando ad aggiornare la mia applicazione dal nodo 0.10.x alla famiglia nodo 0.12.x, sono stato colpito da una spiacevole sorpresa: 0,12 utilizza circa il 15% -20% di RAM in più rispetto a 0,10.node.js utilizzo memoria 0,12.x

A giudicare da un fewthreads sulla pagina di problemi io.js, sembra che il difetto sia dovuto al motore V8 sottostante.

Ora l'aggiornamento del software è una proposta difficile da vendere al management così com'è. Aggiungete a ciò la necessità di pagare per più hardware VPS con pochi vantaggi visibili, e questo diventa per noi un rompicapo.

C'è un modo per disattivare qualsiasi nuovo campanello & fischi che v8 ha aggiunto che stanno occupando la RAM aggiuntiva? Forse la roba del profiling della CPU?

Sono fondamentalmente alla ricerca di uno switch v8 che può ridurre l'utilizzo della memoria al livello paragonabile alla v8 fornita con il nodo 0.10.

+0

In che modo io.js costa 0,10 nella tua applicazione? –

+0

Ho appena provato a testarlo, ma sono stato colpito da una serie di problemi irrisolti di npm (incompatibilità nodo-gyp). A quel punto mi sono arreso, anche se potevo farlo funzionare su questo unico sistema di test, non sembra qualcosa su cui posso fare affidamento in produzione. – panta82

+1

Si prega di considerare i problemi di apertura contro i bug che si incontrano in io.js, penso che qualunque sia il risultato ottenuto superi 0.10, puoi vincere usando i generatori anziché le chiusure per le operazioni asincrone che è più veloce. Inoltre, hai effettivamente perso le prestazioni o solo l'utilizzo della memoria? (Come in, data la stessa quantità di RAM di sistema disponibile - serve anche il 15% in meno di richieste?) –

risposta

8

È possibile limitare la quantità di memoria utilizzata dal processo Node.js con il flag --max-old-space-size. Forse puoi limitare la memoria a qualcosa di accettabile e quindi eseguire il benchmark della tua app per vedere se funziona in modo accettabile.

node --max-old-space-size=512 myScript.js 

Credo che ci siano anche flag che controllano la garbage collection che potrebbe valere la pena esplorare. E anche lo potrebbe valere la pena di leggerlo.

+0

L'opzione '--max-old-space-size' viene utilizzata per aumentare la memoria massima di un processo nodo sopra 512mb. Non sembra fare nulla se impostato al di sotto di tale valore, e anche se così fosse, non vedo come sarebbe di aiuto (tranne causare un crash).Conosco le funzionalità di profilazione delle prestazioni, il problema è che lo stesso codice utilizza quantità diverse di RAM su runtime diversi. Quindi c'è qualcosa nel V8 stesso che prende lo spazio extra, non il codice che posso profilare. – panta82

0

Se ripristinare la v.10 è un'opzione per voi, è possibile farlo facilmente utilizzando Node Version Manager NVM. Basta passare a qualsiasi versione che ti piace in movimento e usarlo, in attesa di una correzione per v.12.

+0

Questo è quello che ho fatto. Non è la vera soluzione che stavo cercando, però. – panta82