2008-09-27 17 views
23

birçok işlemler ve bir (veya daha fazla) olan bir sistem (Ubuntu) sahip olduğu bir bellek sızıntısı bulmak nasıl. Sızıntıya sahip süreci bulmak için iyi bir yol var mı? Sürecin bir kısmı JVM'dir, bazıları değildir. Bazıları yetiştirilmekte olup bazıları açık kaynaklıdır.i bu işlem sızıntı bellek

cevap

3

Zor görev. Normalde Valgrind gibi bir hata ayıklayıcı/bellek profilerini almayı ve programların bir tanesini sonra çalıştırmayı öneririm. Yakında veya daha sonra sızıntı yapan programı bulabilir ve ona söyleverebilir ya da kendiniz düzeltebilirsiniz.

+0

[valgrind] (http://valgrind.org/) – nickleefly

13

top komutunu çalıştırabilirsiniz (etkileşimli olmayan şekilde çalıştırmak için top -b -n 1 yazın). Aşağıdaki sütunlara bakmak, bellek sızıntısı olan uygulamaları görmek için:

  • RPRVT - ikamet özel adres alanı boyutu
  • RSHRD - ikamet paylaşılan adres alanı boyutu
  • rsize - ikamet bellek boyutu
  • VPRVT - özel adres alanı boyutu
  • VSIZE - toplam bellek boyutu suggeseted gibi
+1

Ben bu bilgiler bir çıkış vermez top için geçmesi her ne komut satırı argümanları ancak bu çalışıyordum deneyin. Ben PID KULLANICI PR NI VIRT RES SHR S% CPU% MEM TIME + COMMAND 'gibi sth olsun. Gerekli çıktıyı nasıl alacağınıza dair herhangi bir öneriniz var mı? – niko

3

, gitmek için yol valgrind olduğunu. Belleğin kullanımı da dahil olmak üzere, uygulamanızın çalışan performansının birçok yönünü kontrol eden bir uzman.

Valgrind aracılığıyla uygulamayı çalıştıran size aynı bellek serbest eğer malloc ile ayrılmış bellek serbest bırakmak için unutursanız doğrulamak sağlayacak iki kez vb

+3

Belirli bir programın bellek sızıntılarını nasıl izleyeceğini sormuyordu. Ama nasıl tanımlanır, hangi süreçlerden sızan olanlar vardı. – akauppi

5

üste ek olarak, Sistem Monitörü (System kullanabilirsiniz - Yönetim - Sistem Monitörü'nü ve ardından İşlemler sekmesini seçin). Görünüm - Tüm İşlemler'i seçin, Düzenle - Tercihler'e gidin ve Sanal Bellek sütununu etkinleştirin. Sıralama ya bu sütuna göre veya Hafıza sütununda

+1

GNOME kesinlikle buna sahip! – thanikkal

10

tarafından uzun süre boyunca programı sızıntıları, üst pratik olmayabilir eğer. Önemli miktarda bellek sızmasının ne kadar sürdüğüne bağlı olarak "ps aux" sonucunu her X saniyede bir dosyaya ekleyen basit bir kabuk komut dosyası yazabilirim. gibi bir şey: Eğer tümdengelim bunu yapamıyorsan

while true 
do 
echo "---------------------------------" >> /tmp/mem_usage 
date >> /tmp/mem_usage 
ps aux >> /tmp/mem_usage 
sleep 60 
done 
3

, desen ayıklama Sinyal Flare düşünün: on kat bir işlemle ayrılan bellek miktarını artırın. Sonra programınızı çalıştırın.

sızan bellek miktarı aynı ise

, bu süreç sızıntı kaynağı değildi; İşlemi geri yükleyin ve bir sonraki işleme aynı değişikliği yapın.

Eğer sorumludur sürecini vurmak

, kendi bellek sızıntısı atlama ("sinyal parlama") boyutunu göreceksiniz. Bu işlemdeki ayrı ifadelerin ayırma boyutunu seçici olarak artırarak daha da daraltabilirsiniz. Daha iyi bir alternatif top olarak

2

Ben Htop kullanımını öneriyoruz.

İlgili konular