Node.js'nin bellek kullanımı nasıl izlenir?


Yanıtlar:


66

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


1
node-memwatch artık hayatta görünmüyor (en son Mart 2013'te güncellenmiştir). Herhangi bir alternatif var mı?
Golo Roden

6
@GoloRoden npm memwatch yükle-next iyi çalışıyor. İşte repo: github.com/marcominetti/node-memwatch
fre2ak

Bellek sızıntılarını araştırmak
saintedlama

22
memwatch artık korunmuyor ve düğümün son sürümünde çalışmayacağından rahatsız bile etmeyin.
Mike


153

Yerleşik işlem modülü, memoryUsagemevcut 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.


1
Düğüm @MestreSan hangi sürümünü ihtiyacı yoktur --expose-gciçin gcfonksiyonun?
Rob W

1
@MestreSan Sana ihtiyacım bunu demedim --expose-gciçin process.memoryUsage(). gc()(gerektiren --expose-gc), process.memoryUsageraporların ne olduğunu görmeyi kolaylaştırmak için çöp toplamayı belirleyici olarak tetiklemek için yanıtta kullanılmıştır .
Rob W

JS-Stuff'i doğru şekilde ölçmek için harika bir cevap. Cevabınız için teşekkür ederim.
suther

Lordlar bununla çalıştınız. Daha verimli bir uygulama oluşturmama yardımcı olacak süreci çağırarak ortaya çıkan tüm yöntemleri yeni fark ettim. Teşekkürler.
Andrew

40

Ayrıca, düğüm süreci yerine genel belleği bilmek istiyorsanız ':

var os = require('os');

os.freemem();
os.totalmem();

Belgelere bakın


1
Ancak, freemem () sunucudaki kullanılabilir bellekle aynı değildir. Boş hafıza yerine kullanılabilir hafıza bulmanın bir yolu var mı?
Alex


5

Linux / Unix'te (not: Mac OS bir Unix'tir), işlemleri bellek kullanımına göre sıralamak için topM ( Shift+ M) tuşunu kullanın ve tuşuna basın .

Windows'ta Görev Yöneticisini kullanın.


@majidarif adresine gidin Applications > Utilitiesve bir Activity Monitoruygulama bulacaksınız . Bu, Görev Yöneticisinin eşdeğeridir. OS X'de de topkomut var.
Ingwie Phoenix

3
htopLinux'ta top yerine kullanın . Bu daha iyi.
Ryan Shillington
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.