Vmstat ile% bellek kullanımı nasıl elde edilir?


9

% Vmstat bellek kullanımı almak gerekiyor, ama vmstat görüntülenen bellek ile ilgili bazı sayılar oldukça anlamıyorum.

Özellikle, böyle bir çıktı verildiğinde

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0 139728  45396 199128 1236360    1    2     4   622    3    1 51  4 43  2  0

Sistemin toplam bellek miktarı nedir? Toplam 1620612 olan 'swpd' + 'free' + 'buff' + 'önbellek' mi?

Sistemin boş hafıza alanı nedir? 'Serbest' sütununda gösterildiği gibi 45396 mı?

Sorun, toplanmadıkları ve hatta 'en iyi' rapor edilenlere yakın görünmüyor olmalarıdır. 'Vmstat' yukarıdaki ile aynı zamanda aldı 'üst' çıktı:

[...]
Mem:   4059616k total,  3965504k used,    94112k free,   200020k buffers
[...]

Yani ... 'vmstat' içinde bilmediğim gizli numaralar / seçenekler olması gerektiğini varsayıyorum.

Bu amaç için 'vmstat' kullanmalıyım ve diğer komutları değil, bu gereksinimin belirttiği gibi kullanmalıyım.

İdeal olarak, 'vmstat' dan elde etmek istediğim,% bellek kullanımı, olduğu gibi:

<used_memory>/<total_memory> * 100%.

Teşekkürler!


Yanıtlar:


20

Aradığın şey "ücretsiz" in çıktısı:

$ free
             total       used       free     shared    buffers     cached
Mem:        775556     759456      16100          0      22132     592484
-/+ buffers/cache:     144840     630716
Swap:       500344      21972     478372

İşte bir tur:

Bu, 768MB fiziksel RAM ve 500344KB takas bölümü içeren bir kutudur.

759456KB "kullanıldı" (ikinci sütun, üst sıra). Bu "kullanılmış" hafızadan 23132KB tamponlar (5. sütun, üst sıra) ve 592484KB (altıncı sütun, üst sıra) önbellektir ve aktif işlemler tarafından kullanılan 144840KB (2. sütun, 2. sıra) fiziksel bellek bırakır.

Tamponlar ve önbellek tarafından kullanılan belleğin işlemler için kullanılabileceğini düşündüğünüzde, 630716KB (3. sütun, 2. sıra) fiziksel bellek boş kalır.

Takas bölümü dediğim gibi 500344KB (1. sütun, alt sıra). Takas dosyasının 21972KB (2. sütun, alt sıra) kullanımda, 478372KB (3. sütun, alt sıra) boş bırakılıyor.

Bu nedenle,% boş bellek tanımınız arabellekleri ve önbelleği sayıp saymamanıza ve takas sayıp saymamanıza bağlıdır.

Bu, uygun gördüğünüz bir yüzdeyi hesaplamak için size yeterli miktarda vermelidir.


İşte üst ve ücretsiz çıktı:

$ top -n1 | grep "used," ; free
Mem:    775556k total,   751472k used,    24084k free,    20776k buffers
Swap:   500344k total,    21972k used,   478372k free,   586648k cached

             total       used       free     shared    buffers     cached
Mem:        775556     751344      24212          0      20776     586648
-/+ buffers/cache:     143920     631636
Swap:       500344      21972     478372

En iyi ve özgür olanın nasıl anlaştığını görebilirsiniz (küçük bir fark olsa da - bu çok kullanıcılı bir makinedir ve en iyi ve ücretsiz programların bellek kullanımı oraya yansıtılır).


Vmstate öğesini çağırdığınızda bir "-s" ekleyin ve aynı çıktıyı çok farklı bir biçimde görürsünüz:

$ vmstat -s ; free
       775556  total memory
       759920  used memory
       674680  active memory
        18440  inactive memory
        15636  free memory
        21892  buffer memory
       594372  swap cache
       500344  total swap
        21972  used swap
       478372  free swap
       ... output truncated ...

             total       used       free     shared    buffers     cached
Mem:        775556     759920      15636          0      21892     594372
-/+ buffers/cache:     143656     631900
Swap:       500344      21972     478372

Vmstat'ın aynı sayıları ücretsiz olarak gösterdiğini görebilirsiniz.


Bu kıvrımlı konuda henüz bulduğum en iyi cevap!
rinogo

2

Seninle aynı sorum var ve bir formül buluyorum

vmstat -s | awk  ' $0 ~ /total memory/ {total=$1 } $0 ~/free memory/ {free=$1} $0 ~/buffer memory/ {buffer=$1} $0 ~/cache/ {cache=$1} END{print (total-free-buffer-cache)/total*100}'

3.3.10 procps-ng'den vmstat sürümünde ve 3.3.9 procps-ng'den vmstat sürümünde test ettim



0

Aşağıda , istenen yüzdeyi en yakın tam sayıya yuvarlayan bir POSIX kabuk işlevi verilmiştir (komut dosyası oluşturma amacıyla bu daha yararlı olabilir, çünkü POSIX kabuk aritmetik karşılaştırma testleri yalnızca tamsayılarla çalışır):

# Vmstat (derived) Used Ram Percent
vurp() { vmstat -s | { read a b ; read c d ; echo $((100*$c/$a)) ; } ; }
vurp

Çıktı (sistemimde):

12

Aynı şey free:

furp() { free | { read z; read a b c d; echo $((100*$c/$b)) ; } }
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.