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 memoryUsagequi 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-gcpour la gcfonction?
--expose-gcpour 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.memoryUsagerapports.
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 topet appuyez sur M ( Shift+ M) pour trier les processus par utilisation de la mémoire.
Sous Windows, utilisez le gestionnaire de tâches.
Applications > Utilitieset vous trouverez une Activity Monitorapplication. Celui-ci est l'équivalent du gestionnaire de tâches. OS X a également la topcommande.
htopau lieu de top sur Linux. C'est beaucoup mieux.