Risposte:
node-memwatch : rileva e trova perdite di memoria nel codice Node.JS. Controlla questo tutorial Tracking Down Memory Leaks in Node.js
Il modulo di processo integrato ha un metodo memoryUsageche offre informazioni sull'utilizzo della memoria dell'attuale processo Node.js. Ecco un esempio tratto da Node v0.12.2 su un sistema a 64 bit:
$ node --expose-gc
> process.memoryUsage(); // Initial usage
{ rss: 19853312, heapTotal: 9751808, heapUsed: 4535648 }
> gc(); // Force a GC for the baseline.
undefined
> process.memoryUsage(); // Baseline memory usage.
{ rss: 22269952, heapTotal: 11803648, heapUsed: 4530208 }
> var a = new Array(1e7); // Allocate memory for 10m items in an array
undefined
> process.memoryUsage(); // Memory after allocating so many items
{ rss: 102535168, heapTotal: 91823104, heapUsed: 85246576 }
> a = null; // Allow the array to be garbage-collected
null
> gc(); // Force GC (requires node --expose-gc)
undefined
> process.memoryUsage(); // Memory usage after GC
{ rss: 23293952, heapTotal: 11803648, heapUsed: 4528072 }
> process.memoryUsage(); // Memory usage after idling
{ rss: 23293952, heapTotal: 11803648, heapUsed: 4753376 }
In questo semplice esempio, puoi vedere che l'allocazione di un array di 10 milioni di elementi consuma circa 80 MB (dai un'occhiata heapUsed).
Se si guarda il codice sorgente di V8 ( Array::New, Heap::AllocateRawFixedArray, FixedArray::SizeFor), allora vedrai che la memoria utilizzata da un array è un valore fisso più la lunghezza moltiplicata per la dimensione di un puntatore. Quest'ultimo è di 8 byte su un sistema a 64 bit, il che conferma che la differenza di memoria osservata di 8 x 10 = 80 MB ha senso.
--expose-gcdella gcfunzione?
--expose-gcper process.memoryUsage(). gc()(require --expose-gc) è stato utilizzato nella risposta per attivare in modo deterministico la garbage collection per rendere più facile vedere cosa process.memoryUsageriporta.
Inoltre, se desideri conoscere la memoria globale piuttosto che il processo del nodo ":
var os = require('os');
os.freemem();
os.totalmem();
Il memwatch originale è sostanzialmente morto. Prova invece memwatch-next , che sembra funzionare bene sulle versioni moderne di Node.
Su Linux / Unix (nota: Mac OS è un Unix) usa tope premi M ( Shift+ M) per ordinare i processi in base all'utilizzo della memoria.
Su Windows usa il Task Manager.
Applications > Utilitiese troverai Activity Monitorun'app. Quello è l'equivalente di Task Manager. Anche OS X ha il topcomando.
htopinvece di top su Linux. È molto meglio.