Comment puis-je surveiller l'utilisation de la mémoire de Node.js?
node-memwatch : détecte et trouve les fuites de mémoire dans le code Node.JS. Consultez ce tutoriel Suivi des pertes de mémoire dans Node.js
Le module process intégré a une méthode memoryUsage
qui donne un aperçu de l'utilisation de la mémoire du processus Node.js en cours. Voici un exemple de in Node v0.12.2 sur un système 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 }
Dans cet exemple simple, vous pouvez voir que l’allocation d’un tableau de 10 millions d’éléments consommateurs environ 80 Mo (voir heapUsed
).
Si vous regardez le code source de la V8 ( Array::New
, Heap::AllocateRawFixedArray
, FixedArray::SizeFor
), vous verrez alors que la mémoire utilisée par un tableau est une valeur fixe plus la longueur multipliée par la taille d'un pointeur. Ce dernier est de 8 octets sur un système 64 bits, ce qui confirme que la différence de mémoire observée de 8 x 10 = 80 Mo a du sens.
De plus, si vous souhaitez connaître la mémoire globale plutôt que le processus de nœud ':
var os = require('os');
os.freemem();
os.totalmem();
L'original memwatch est essentiellement mort. Essayez memwatch-next à la place, ce qui semble bien fonctionner sur les versions modernes de Node.
Sous Linux/Unix (note: Mac OS est un Unix), utilisez top
et appuyez sur M (Shift+M) pour trier les processus en fonction de l’utilisation de la mémoire.
Sous Windows, utilisez le gestionnaire de tâches.