web-dev-qa-db-fra.com

Comment surveiller l'utilisation de la mémoire de Node.js?

Comment puis-je surveiller l'utilisation de la mémoire de Node.js?

87
fsiaonma

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

59
Damodaran

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.

125
Rob W

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();

Voir documentation

37
Voy

L'original memwatch est essentiellement mort. Essayez memwatch-next à la place, ce qui semble bien fonctionner sur les versions modernes de Node.

26
Joel

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.

3
Robin Green