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.