Araştırma yaptıktan sonra, RAM kullanımını izleme konusunda hala karışık


10

Ben geçti bu makalede sizin RAM kullanımını kontrol etmek için çeşitli yöntemler açıklanır. Ancak, farklı yöntemleri uzlaştıramıyorum ve hangisinin doğru olduğunu bilmiyorum.

İlk giriş yaptığımda şöyle bir ekranla karşılaşıyorum:

  System information as of Sun Apr 28 21:46:58 UTC 2013

  System load:  0.0               Processes:           76
  Usage of /:   15.6% of 7.87GB   Users logged in:     1
  Memory usage: 41%               IP address for eth0: 
  Swap usage:   0%

Bu bana RAM'imin% 41'ini kullandığımı gösteriyor, bu da sunucu fazla bir şey yapmadığı için oldukça yüksek görünüyor. Yoksa bu sayı RAM dışında bir şey mi ifade ediyor?

Sonra free -myöntemi deneyin :

ubuntu@ip-:~$ free -m
             total       used       free     shared    buffers     cached
Mem:           590        513         76          0         67        315
-/+ buffers/cache:        130        459
Swap:            0          0          0

Makaledeki açıklayıcı grafiğe göre, bu, 130MB'lık kullanılmış RAM ve 459MB'lık ücretsiz RAM'e sahip olduğumu ima ediyor, bu da RAM'imin yaklaşık% 22'sini kullandığımı gösteriyor.

Sonra koşuyorum top:

top - 22:14:48 up 195 days, 21:30,  2 users,  load average: 0.00, 0.01, 0.05
Tasks:  77 total,   1 running,  76 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.3%us,  0.3%sy,  0.0%ni, 97.7%id,  0.7%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    604376k total,   525692k used,    78684k free,    69124k buffers
Swap:        0k total,        0k used,        0k free,   322740k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
    1 root      20   0 24332 1864  976 S  0.0  0.3   0:08.75 init               
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd     

Özet, toplam 525MG 604M kullanarak gösterdiğim gibi en kafa karıştırıcıdır ve yine de üst belleğe göre sıralamak için "m" etkileşimli komutu kullanıldığında üst işlem belleğin sadece% 0.3'ünü kullanıyor ???

Son olarak, pskomut çok az bellek kullanımını da gösteriyor:

root@ip-:/home/ubuntu# ps -o command,rss
COMMAND                       RSS
ps -o command,rss             788
sudo su root                 1764
su root                      1404
bash                         2132

Birinin bu görünür çatışmaları yaratan yanlış anlamaları düzeltmesini isterim.

Teşekkürler!

Rahul için EDIT

Çıkışı cat /proc/meminfo:

MemTotal:         604376 kB
MemFree:          157564 kB
Buffers:           49640 kB
Cached:           231376 kB
SwapCached:            0 kB
Active:           290040 kB
Inactive:          97772 kB
Active(anon):     107672 kB
Inactive(anon):     4844 kB
Active(file):     182368 kB
Inactive(file):    92928 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                52 kB
Writeback:             0 kB
AnonPages:        106836 kB
Mapped:            22920 kB
Shmem:              5712 kB
Slab:              42032 kB
SReclaimable:      34016 kB
SUnreclaim:         8016 kB
KernelStack:         688 kB
PageTables:         3584 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      302188 kB
Committed_AS:     242768 kB
VmallocTotal:   34359738367 kB
VmallocUsed:        7152 kB
VmallocChunk:   34359729008 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      637952 kB
DirectMap2M:           0 kB

# 1) hafıza ile tür üst komuta değil m bu, M . # 2) Tüm işlemleri görmek için ** ps ax -o komutunu deneyin, rss **; koştuğun şey sadece kendi olanlarını gösterir.
tink

Lütfen bize bildirin güncellemecat /proc/meminfo
Rahul Patil


@tink, bu açıklama için teşekkürler. ps ax -o rss | awk '{ sum+=$1} END {print sum}'Hemen şimdi denedim ve 153156.
Jonah

@RahulPatil, OP güncellendi. Çalışan işlemlerin orijinal sayılardan biraz farklı olabileceğini, ancak bu kadar uzakta olmaması gerektiğini unutmayın. Ayrıca, sizin için elde ettiğim sonuç, yukarıdaki yorumda tink için aldığım sonuçla eşleşmiyor gibi görünüyor. Bunlar sadece birkaç dakika arayla alındı.
Jonah

Yanıtlar:


8

Sadece Hafıza Konseptini anlamalısınız

/ Proc / meminfo Çıktısına göre, aşağıdaki şeylere dikkat etmeniz yeterlidir:

Tamponlar : - Tampon henüz diske "yazılmamış" bir şeydir. Önbellek disk bloğuna ne kadar RAM adanmış olduğunu gösterir. "Önbellek", "Tamponlar" a benzer, ancak bu sefer sayfaları dosya okumasından önbelleğe alır

Önbellek : - Önbellek, diskten "okunan" ve daha sonra kullanılmak üzere saklanan bir şeydir. Genellikle, önbellek alanını başka bir "boş" RAM olarak düşünebilirsiniz, çünkü uygulama daha fazla bellek talep ederse kademeli olarak küçülecektir.

Hem "tamponların" hem de "Önbellek" lerin sistem önbelleğinin boyutunu temsil ettiğini anlamak yeterlidir. Dahili Linux çekirdek mekanizması tarafından istendiği gibi dinamik olarak büyürler veya küçülürler.

Webhosting'de aşağıdaki cmd'yi kullanarak önbelleği temizlerler: (çoğunlukla cron'da yapılandırılır):

sync && echo 3 > /proc/sys/vm/drop_caches

Alıntı Bağlantısı

Kullanıcı gereksinimi başına bir gereksinim için DÜZENLE

#!/bin/bash
total_mem=0

printf "%-10s%-10s\n" User MemUsage

while read u m
do
        [[ $old_user != $u ]] && { printf "%-10s%-0.1f\n" $old_user $total_mem; total_mem=0; }
        total_mem=$(echo $m + $total_mem | bc);
        old_user=$u

done < <(ps --no-headers -eo user,%mem| sort -k1)

#--EOF

Lütfen yukarıdaki komut dosyasına bakın ve düzgün bir şekilde gösterilip gösterilmediğini bana bildirin.


Teşekkürler Rahul. Son bir soru. Yana free -mkullanıcı başına kullanılan görünüm belleğine bir yol sağlamaz, belirli bir kullanıcı tarafından tüketilmektedir ne kadar gerçek RAM belirlemek için doğru bir yol nedir? Bu, örneğin paylaşılan bir sunucuda kendi bellek kullanımınızı izlerken ortaya çıkar.
Jonah

@Jonah güncelledim .. lütfen kontrol edin ve bana bildirin
Rahul Patil

bu senaryo beklendiği gibi çalışmıyor .. ama yakında güncelleme yapacağım
Rahul Patil

@Jonah benim ans kabul ettiğiniz için teşekkürler .. ama MichaelHampton için gerçek teşekkürler ...
Rahul Patil

2

İyi cevap @RahulPatil.

Ps veya top hakkında düşünülmesi gereken bir başka nokta da

Bu araç [exmap], birden fazla uygulama tarafından kullanılan paylaşılan kitaplıkları dikkate aldığından ps veya top uygulamasından daha doğrudur. Örneğin, iki uygulama 1 MB bellek kullanan aynı paylaşılan kitaplığı kullanıyorsa ps her iki uygulamayı da 1 MB ekstra bellek kullanarak gösterirken, exmap her uygulamayı 500 KB kullanarak daha doğru gösterir. Bu daha yüksek doğruluk, uygulamalar arasında paylaşılan kitaplıkları çok yoğun kullanan KDE ve GNOME gibi masaüstü ortamlarının değerlendirilmesi için özellikle önemlidir.

Via ibm / developerWorks / linux_memory

Sorunuz başsız bir sunucuya atıfta bulunduğundan - ne kadar çift raporlama üst veya ps gerçekten olacak emin değilim.


0

Korkarım ki bariz olanı göz ardı edebiliriz çünkü çoğumuz için böyle bir "elbette".

Jonah, yanılıyorsam beni affet, ama sorularınız sizin gibi geliyor, özellikle tüm bu değerlerin, CPU kullanımının normalde saniyeden saniyeye çok değişeceğini fark etmemiş olabilirsiniz.

İşlemci kullanımı yeni bir işlem başlatıldığında anında tek basamaktan% 100'e geçebilir ancak hızlı bir şekilde (umarım)% 50'nin altına düşer.

Bellek kullanımı daha yavaş değişir, ancak Linux disk erişimlerini "önbelleğe almak" için işlemleri çalıştırarak etkin kullanımda olmayan belleği kullanmaya çalışır. Örneğin, bir bölüm okunduktan sonra büyük bir dosyanın geri kalanı gibi bir sonraki diskten ne okunması gerektiğini tahmin etmeye ve önbelleğe önceden yüklemeye çalışır. Bellek kullanım değerlerinden bazıları hem işlemler tarafından kullanılan belleği hem de önbellekleme için kullanılan belleği içerir. Bir süredir çalışan bir sistemde, iki kombine muhtemelen% 80-90 veya daha fazla olacaktır.

Kullanımı göstermek için çalıştırdığınız işlemin topCPU ve bellek de kullandığını düşünün . CPU kullanımını sürekli olarak bildirmek için bir döngü içeren bir komut dosyası yazdıysanız, kullanımın kendisini (bazı sleep gecikmeler olmadan) bildirme eylemi tüm CPU'yu kullandığından , neredeyse her zaman% 100 gösterecektir .


Doktor, düşünce için teşekkürler, ama sorun bu değildi
Jonah
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.