Réponses:
node-memwatch : détecte et trouve les fuites de mémoire dans le code Node.JS. Consultez ce tutoriel sur le suivi des fuites de mémoire dans Node.js
Le module de processus intégré a une méthode memoryUsage
qui offre un aperçu de l'utilisation de la mémoire du processus Node.js. actuel. Voici un exemple de 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 consomme environ 80 Mo (jetez un œil à heapUsed
).
Si vous regardez le code source de V8 ( Array::New
, Heap::AllocateRawFixedArray
, FixedArray::SizeFor
), vous verrez 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 qu'une différence de mémoire observée de 8 x 10 = 80 Mo a du sens.
--expose-gc
pour la gc
fonction?
--expose-gc
pour process.memoryUsage()
. gc()
(Requérant --expose-gc
) a été utilisé dans la réponse pour déclencher de manière déterministe le garbage collection afin de faciliter la visualisation de ce que les process.memoryUsage
rapports.
Aussi, 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();
Le memwatch original est essentiellement mort. Essayez plutôt memwatch-next , 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 par utilisation de la mémoire.
Sous Windows, utilisez le gestionnaire de tâches.
Applications > Utilities
et vous trouverez une Activity Monitor
application. Celui-ci est l'équivalent du gestionnaire de tâches. OS X a également la top
commande.
htop
au lieu de top sur Linux. C'est beaucoup mieux.