Respostas:
node-memwatch : detecta e encontra vazamentos de memória no código Node.JS Confira este tutorial Rastreando Vazamentos de Memória em Node.js
O módulo de processo integrado possui um método memoryUsage
que oferece uma visão sobre o uso de memória do processo Node.js. Aqui está um exemplo do Node v0.12.2 em um 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 }
Neste exemplo simples, você pode ver que alocar uma matriz de 10 milhões de elementos consumidores de aproximadamente 80 MB (dê uma olhada em heapUsed
).
Se você olhar para o código-fonte do V8 ( Array::New
, Heap::AllocateRawFixedArray
, FixedArray::SizeFor
), então você vai ver que a memória usada por uma matriz é um valor fixo mais o comprimento multiplicado pelo tamanho de um ponteiro. O último é de 8 bytes em um sistema de 64 bits, o que confirma que a diferença de memória observada de 8 x 10 = 80 MB faz sentido.
--expose-gc
para a gc
função?
--expose-gc
para process.memoryUsage()
. gc()
(exigindo --expose-gc
) foi usado na resposta para acionar de forma determinística a coleta de lixo para tornar mais fácil ver o que os process.memoryUsage
relatórios.
Além disso, se você quiser saber a memória global em vez do processo de nó ':
var os = require('os');
os.freemem();
os.totalmem();
O memwatch original está essencialmente morto. Em vez disso, tente memwatch-next , que parece estar funcionando bem em versões modernas do Node.
No Linux / Unix (nota: Mac OS é um Unix), use top
e pressione M ( Shift+ M) para classificar os processos por uso de memória.
No Windows, use o Gerenciador de Tarefas.
Applications > Utilities
e você encontrará um Activity Monitor
aplicativo. Esse é o equivalente ao Gerenciador de Tarefas. O OS X também tem o top
comando.
htop
vez de superior no Linux. É muito melhor.