Yanıtlar:
node-memwatch : Node.JS kodundaki bellek sızıntılarını tespit edin ve bulun. Node.js'de Bellek Sızıntılarını İzleme Bu eğiticiye göz atın
Yerleşik işlem modülü, memoryUsage
mevcut Node.js işleminin bellek kullanımı hakkında fikir veren bir yönteme sahiptir . 64 bitlik bir sistemde Node v0.12.2'den bir örnek:
$ 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 }
Bu basit örnekte, tüketicilere yaklaşık 80MB 10 milyon öğe ayırmanın olduğunu görebilirsiniz (bir göz atın heapUsed
).
Eğer V8 'kaynak koduna baktığımızda ( Array::New
, Heap::AllocateRawFixedArray
, FixedArray::SizeFor
), o zaman bir dizi tarafından kullanılan bellek bir işaretçi büyüklüğü ile çarpılarak sabit bir değer artı uzunluğu olduğunu göreceksiniz. İkincisi, 64 bitlik bir sistemde 8 bayttır, bu da 8 x 10 = 80 MB'lik gözlenen bellek farkının anlamlı olduğunu doğrular.
--expose-gc
için gc
fonksiyonun?
--expose-gc
için process.memoryUsage()
. gc()
(gerektiren --expose-gc
), process.memoryUsage
raporların ne olduğunu görmeyi kolaylaştırmak için çöp toplamayı belirleyici olarak tetiklemek için yanıtta kullanılmıştır .
Ayrıca, düğüm süreci yerine genel belleği bilmek istiyorsanız ':
var os = require('os');
os.freemem();
os.totalmem();
Orijinal memwatch aslında öldü. Bunun yerine memwatch-next'i deneyin ; bu, Node'un modern sürümlerinde iyi çalışıyor gibi görünüyor.
Linux / Unix'te (not: Mac OS bir Unix'tir), işlemleri bellek kullanımına göre sıralamak için top
M ( Shift+ M) tuşunu kullanın ve tuşuna basın .
Windows'ta Görev Yöneticisini kullanın.
Applications > Utilities
ve bir Activity Monitor
uygulama bulacaksınız . Bu, Görev Yöneticisinin eşdeğeridir. OS X'de de top
komut var.
htop
Linux'ta top yerine kullanın . Bu daha iyi.