Respuestas:
node-memwatch : detecta y encuentra fugas de memoria en el código Node.JS. Consulte este tutorial Seguimiento de pérdidas de memoria en Node.js
El módulo de proceso integrado tiene un método memoryUsage
que ofrece información sobre el uso de memoria del proceso actual de Node.js. Aquí hay un ejemplo de Node v0.12.2 en un sistema de 64 bits:
$ 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 }
En este ejemplo simple, puede ver que la asignación de una matriz de 10 millones de elementos consume aproximadamente 80 MB (eche un vistazo heapUsed
).
Si nos fijamos en el código fuente de V8 ( Array::New
, Heap::AllocateRawFixedArray
, FixedArray::SizeFor
), entonces se verá que la memoria utilizada por un array es un valor fijo más la longitud multiplicada por el tamaño de un puntero. Este último es de 8 bytes en un sistema de 64 bits, lo que confirma que la diferencia de memoria observada de 8 x 10 = 80 MB tiene sentido.
--expose-gc
para la gc
función?
--expose-gc
para process.memoryUsage()
. gc()
(require --expose-gc
) se usó en la respuesta para activar de manera determinista la recolección de basura para que sea más fácil ver lo que process.memoryUsage
informan.
Además, si desea conocer la memoria global en lugar del proceso de nodo ':
var os = require('os');
os.freemem();
os.totalmem();
El memwatch original está esencialmente muerto. Trate memwatch-próxima vez, que parece estar funcionando bien en las versiones modernas de Nodo.
En Linux / Unix (nota: Mac OS es un Unix) use top
y presione M (Shift + M) para ordenar los procesos por uso de memoria.
En Windows, use el Administrador de tareas.
Applications > Utilities
y encontrará una Activity Monitor
aplicación. Ese es el equivalente al Administrador de tareas. OS X también tiene el top
comando.
htop
lugar de top en Linux. Es mucho mejor.