Ücretsiz RAM kayboluyor - Bellek sızıntısı mı var?


11

Yeni başlatılan bir sistemde, free1.5G kullanılan RAM hakkında raporlar (tamamen 8G RAM, lightdm ve plazma masaüstü ile Ubuntu 12.04, bir konsol penceresi başladı). Kullandığım uygulamaları çalıştırırken, hala 2G'den fazla tüketmiyor. Ancak, sistemin birkaç gün çalışmasını sağlayarak, ücretsiz RAM'imin giderek daha fazlası kayboluyor - kullanılan uygulamalar listesinde görünmeden: smem --pie=name% 20'den daha az rapor kullanılıyorsa (ve% 80 kullanılabilir), diğer her şey farklı. free -mörneğin yaklaşık 7. güne ilişkin raporlar:

             total       used       free     shared    buffers     cached
Mem:          7459       7013        446          0        178        997
-/+ buffers/cache:       5836       1623
Swap:         9536        296       9240

(görebileceğiniz gibi, bu arabellekler veya önbellek değildir). Bugün bu nihayet sistem tamamen çöktü ile sona erdi: windows yöneticisi gitti, uygulamalar "havada asılı" (çerçevesiz) - ve "çok fazla açık dosya" hakkında bana bildiren bir pop-up. Syslog raporları:

kernel: [856738.020829] VFS: file-max limit 752838 reached

Böylece kapatabildiğim uygulamaları kapattım ve Ctrl-Alt-backspace kullanarak X'i öldürdüm. X, failsafeX ile bundan sonra tekrar gelmeye çalıştı, ancak artık yapılandırmasını algılayamadığı için bunu yapamadı. Bu yüzden Ctrl-Alt-F2 kullanarak bir konsola geçtim, aklıma gelen tüm bilgileri (vmstat, free, smem proc/meminfo, lsof, ps aux) yakaladım ve son olarak yeniden başlattım . X tekrar failsafeX ile geldi; Bu sefer ona "yedeklenmiş yapılandırmamdan kurtarmayı" söyledim, sonra bir konsola geçtim startxve grafiksel ortamı ortaya çıkarmak için başarılı bir şekilde kullandım .

Bu soruna neden olan şey hakkında gerçek bir ipucum yok - X'in kendisiyle veya X üzerinde çalışan bazı kullanıcı süreçleriyle ilgili olması gerekse de - X'i öldürdükten sonra free -mçıktı şu şekilde görünüyordu:

             total       used       free     shared    buffers     cached
Mem:          7459       2677       4781          0         62        419
-/+ buffers/cache:       2195       5263
Swap:         9536         59       9477

(~ 3.5GB serbest bırakılıyor) - yeni bir başlangıçtan sonra çıkışla karşılaştırmak için:

             total       used       free     shared    buffers     cached
Mem:          7459       1483       5975          0         63        730
-/+ buffers/cache:        689       6769
Swap:         9536          0       9536

İki yardımcı çıkış daha sağlar memstat -u. Kazadan kısa bir süre önce:

User     Count     Swap      USS      PSS      RSS
mail         1        0      200      207      616
whoopsie     1      764      740      817     2300
colord       1     3200      836      894     2156
root        62    70404   352996   382260   569920
izzy        80   177508  1465416  1519266  1851840

X'i öldürdükten sonra:

User     Count     Swap      USS      PSS      RSS
mail         1        0      184      188      356
izzy         1     1400      708      739     1080
whoopsie     1      848      668      826     1772
colord       1     3204      804      888     1728
root        62    54876   131708   149950   267860

Ve bir yeniden başlatmadan sonra, X'te:

User     Count     Swap      USS      PSS      RSS
mail         1        0      212      217      628
whoopsie     1        0     1536     1880     5096
colord       1        0     3740     4217     7936
root        54        0   148668   180911   345132
izzy        47        0   370928   437562   915056

Bir hafta boyunca Dosya Sistemi Kullanımı Bir hafta boyunca çekirdek / CPU kullanımı

Düzenleme: İzleme sistemimden iki grafik ekledim. Görmek ilginç: bellek tüketiminde bir "sıçrama" olduğunda, CPU da zirve yapıyor. Hemen şimdi buldum - ve bana X'in kendisine işaret eden başka bir göstergeyi hatırlatıyor: Genellikle makineme geri döndüğümde ve ekran kilidini açtığımda, CPU'mda ağır işler yapan bir şey buldum. İle kontrol top, her zaman olduğu ortaya çıktı /usr/bin/X :0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch -background none.

Bu uzun açıklamadan sonra, sonunda sorularım:

  1. Olası nedenler neler olabilir?
  2. İlgili süreçleri / uygulamaları nasıl daha iyi tanımlayabilirim?
  3. Bu davranışı önlemek için hangi adımları atabilirsiniz - makineyi X gün boyunca yeniden başlatmaktan kısa süre?

Eski makinemde yaklaşık 5 yıldır 8.04 (Hardy) kullanıyordum, hiç böyle bir deneyim yaşamadım (örneğin çekirdek güncellemeleri için yeniden başlatmadan önce her zaman 100 günden fazla çalışma süresi). Şimdi 12.04 yeni kurulum ile tamamen yeni bir makine . Önemli olması durumunda, bazı özellikler:

Radeon (tm) HD Grafikli AMD A4-3400 APU, açık kaynaklı ati / radeon sürücüsü (fglrx takılı değil), 8GB RAM, WDC WD1002FAEX-0 hdd (1 TB), Asus F1A75-V Evo anakart. Ubuntu 12.04 KDE4 / Plazma ile 64 bit. Genellikle daha fazla veya daha az kalıcı olarak açılan uygulamalar arasında Evolution, Firefox, konsole (Midnight Commander içeride çalışıyor, yaklaşık 4 sekme var) ve LibreOffice - artı bazen Caliber, Gimp ve Moneyplex (neredeyse 20 yıldır kullandığım bankacılık yazılımı, Hardy üzerinde iyi olan bir versiyonda).

Düzenleme: Bugün "kötü adamlar" birini buldum: KDE4s plazma masaüstü. Ben kullandığımda kullanılan bellek yine 5GB, oldu killall plasma-desktop && plasma-desktop. Bu 1.3GB RAM boşalttı! psdiyor:

                             RSS    SIZE   VSZ
plasma usage before restart  120988 526472 1300816
plasma usage after restart   92352  495972 1263632

Peki bu 1.3GB nerede? Bu değerler arasındaki fark, eklenirse, 1.3GB değil 96MB'dir.

Ve bu sadece bir parça olabilir, çünkü 3,7 GB kullanımdadır (2 GB'den az olmalıdır). Bunu son 6 gün boyunca birkaç araç kullanarak izledim: kullanılan bellek (önbellek ve arabelleklerden bahsetmemek) yavaş ama istikrarlı bir şekilde artar. Bir şey yapmak için masamda olmasam bile ...

Açık dosyalar ile süreçleri izleme konusunda, şu anda ilk 5'i almak için aşağıdaki 1 astarı (kabuğu ve özellikle bash'ı seviyorum) kullanıyorum:

echo "$(for pid in $(ls -a /proc|egrep '^([0-9])*$'|sort -n 2>/dev/null); do \
if [ -e /proc/$pid/fd ]; then FHC=$(ls -l /proc/$pid/fd|wc -l); \
if [ $FHC -gt 0 ]; then PNAME="$(cat /proc/$pid/comm)"; \
echo "$FHC files opened by $pid ($PNAME)"; fi; fi; done)"|sort -r -n|head -n5

Daha iyi okunabilirlik için buraya 4 satır halinde komut verin. Oradan henüz bir şey yok - Skype'ın İnternet bağlantısının kesilmesini sevmemesi dışında. Her bağlantı kesme, açık dosyalarında hafif bir artışa neden olur, ancak dramatik bir şey değildir. Öte yandan plazma da bundan sorumludur:

VFS kullanımı (2 gün)

Sonunda dosya tanıtıcılarının damlalarını görüyor musunuz? Plazma yeniden başlatıldı.


Does sudo bash -c 'sync; echo 3 > /proc/sys/vm/drop_caches'ekstra ram temizlemek? Aşağıdaki programların açık dosyalarını görebilirsinizlsof
Savvas Radevic

Ayrıca, masaüstü yöneticilerini değiştirmeyi denediniz mi? örneğin lxde (veya lubuntu-desktop)? Son olarak, disk çıktısının iyi olduğundan emin misiniz? Diskin SMART verilerini ve canlı bir cd kullanarak dosyaları diske / diske kopyalama hızını kontrol ettiniz mi?
Savvas Radevic

Bir sızıntınız olup olmadığını görmek için bunu kontrol edin Bellek sızıntısı nasıl tespit edilir
Mitch

@medigeek: Belirttiğim gibi, önbellek ve arabellekler sorun değil. Çıkışına bakınız free. Aslında farklı bir DE'ye geçmeyi düşündüm; KDE3.5 mevcut olsaydı, ben Plazma ile sonuçlanmamıştı. Bu sadece Plazma'nın dahil olup olmadığını görmek için geçici olabilir.
Izzy

@Mitch: Memprof'un bilinen bir sürece karşı kullanılacağını anladım (henüz izole etmedim). Sistem çapında kullanılabilir mi? Dahası, "çok fazla açık dosya" hatasının önerdiği gibi, bana göre bazı süreçler çok fazla dosya tanıtıcısı açıyor, onları asla serbest bırakmıyor. Memprof tarafından yakalanıp yakalanmayacağından emin değilim. Şimdi açık dosyaları ile ilk 5 süreçleri yakalamak için bir komut dosyası ayarladım - umarım bu kötü olanı açar.
Izzy

Yanıtlar:


6
  1. Çok sayıda açık dosya, bir şeyin yanlış gittiğine dair iyi bir ipucudur. Tahminimce bazı KDE sistemi arka plan programı olurdu.

  2. Bir konsol açın ve "üst" komutunu çalıştırın. Ardından, sıralama sütununu VIRT veya RES olarak değiştirmek ve hangi programların en fazla bellek kullandığını görmek için <ve> tuşlarını kullanın. Bir bellek sızıntısı, büyük ölçüde şişirilmiş bir sanal bellek kullanımı olarak görünecektir; Ayrıca "lsof" komutunu çalıştırın ve çok sayıda açık dosya içeren bir işlem arayın, çünkü bu gerçekten bir dosya tanımlayıcı sızıntısı gibi görünüyor.

  3. Programı takip edin ve bir hata bildirin.


Zaten bunun için üst / htop kullanmaya çalıştım. Sorun şu ki, RESident belleği için hiçbir sonuç göstermedi (yukarıda açıklandığı gibi, kullanılan belleğin sadece küçük bir kısmı çalışan uygulamalara bağlanabilir). Ve VIRTual belleğe gelince, yorumlamak zordur (başlangıçtan sonra bile, sanal bellek 3 TB'a kadar toplamları kullanır - sabit diskimin bile işleyemediği bir boyut). Şu anda örneğin Evolution, üstte göre 1.9GB VIRT kullanıyorken, kullanımdaki toplam bellek 1.2GB'a kadar (önbellek ve tamponlar hariç) toplanıyor. Ve evet, ilk niyetim programı izlemek, bu yüzden bir hata
dosyalayabilirim

Sadece benim izleme sistemi 2 imgs ekledi. Görünüşe göre "atlar" her zaman günün aynı saatinde oldu (1 istisna olsa da). Ne yazık ki imgs cron ile kontrol etmek için hiçbir zaman damgası verir. BTW: Hangi işlemin kaç dosya açtığını izlemenin herhangi bir yolu var mı?
Izzy

1
Tahmininiz iyi bir şeydi. Bir daemon olmasa da, esas olarak bir KDE bileşeniydi: plazma-masaüstü (yukarıya bakın). Komik bir şey: Sadece anladım ve buraya gönderdim - ve 10 dakika sonra günlük apt-get update && apt-get upgradeolarak plazma masaüstü için bir güncelleme vardı; Bu adamlar hızlı X) Şimdi bir süre için sorunun çözülüp çözülmediğini görmek için izliyorum. Şimdiye kadar, işler oldukça umut verici görünüyor.
Izzy

Hala istikrarlı görünüyor. Ne olsa lsofne top"kötü süreci" beni işaret etti, KDE cini ilişkin tahminin belası yönünde beni işaret etti. Tekrar teşekkür ederim - makinemin çalışma süresi yaklaşık 14d ve her şey hala istikrarlı görünüyor, buna rağmen VirtualBox, derleme vb. Ben bu çözüldü düşünüyorum ve en yakın maçı işaretlemek :)
Izzy

0

Bence bu normal bir sistem davranışı. Büyük olasılıkla her şey yolunda.

Bu parlak kağıdı (linux benim koçumu yedi), linux'un koçunuzu nasıl yönettiğini ve neden endişelenmenize gerek olmadığını anlamak için okuyabilirsiniz:

http://www.linuxatemyram.com/


4
Oh - sistem "çok fazla açık dosya" hatasıyla 7 gün sonra çökerse bunun "normal sistem davranışı" olduğunu hiç duymadım. Yaklaşık 15 yıldır Linux kullanıyorum, bunu hiç yapmadım. Ve evet, Linux'un "ücretsiz RAM" i (önbellekleme için vb.) Nasıl kullandığını tam olarak anlıyorum Yukarıda belirtildiği gibi: önbellek ve tamponlar burada sorun değildir. RAM'in iyi nedenlerle kullanılmasından bahsetmiyorum - Linux takas fiyatı için asla önbelleklere yapışmazdı.
Izzy
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.