Jak uzyskać% użycia pamięci za pomocą vmstat?

9

Potrzebuję uzyskać użycie pamięci w% z vmstat, ale nie do końca rozumiem niektóre liczby odnoszące się do pamięci wyświetlanej w vmstat.

W szczególności, biorąc pod uwagę taki wynik

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

Jaka jest całkowita ilość pamięci w systemie? Czy to „swpd” + „free” + „buff” + „cache”, co łącznie daje 1620612?

Jaka jest wolna ilość pamięci w systemie? Czy to 45396, jak pokazano w kolumnie „wolna”?

Problem polega na tym, że nie sumują się, ani nawet nie zbliżają do tego, co zgłosiło „top”. Wynik „top”, który wziąłem mniej więcej w tym samym czasie, co „vmstat's powyżej”:

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

Więc ... Zakładam, że w „vmstat” muszą znajdować się ukryte liczby / opcje, o których nie wiedziałem?

W tym celu muszę używać polecenia „vmstat”, a nie innych poleceń, ponieważ taki jest wymóg.

Idealnie więc, co chcę osiągnąć z 'vmstat', to% użycia pamięci, jak w:

<used_memory>/<total_memory> * 100%.

Dzięki!

Jego
źródło

Odpowiedzi:

20

To, czego szukasz, to wyjście z „darmowego”:

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

Oto wycieczka:

Jest to pudełko z 768 MB fizycznej pamięci RAM i partycją wymiany 500344 KB.

759456 KB jest „używany” (druga kolumna, górny wiersz). Z tej „używanej” pamięci 23132 KB to bufory (5. kolumna, górny wiersz), a 592484 KB (szósta kolumna, górny wiersz) to pamięć podręczna, pozostawiając 144840 KB (2. kolumna, 2. rząd) pamięci fizycznej, która jest używana przez aktywne procesy.

Jeśli weźmiesz pod uwagę, że pamięć używana przez bufory i pamięć podręczną może być wykorzystana do procesów, pozostawia 630716 KB (3. kolumna, 2. rząd) wolnej pamięci fizycznej.

Jak powiedziałem, partycja wymiany wynosi 500344 KB (pierwsza kolumna, dolny rząd). 21972 KB (2. kolumna, dolny rząd) pliku wymiany jest w użyciu, pozostawiając 478372 KB (3. kolumna, dolny wiersz).

Zatem twoja definicja% wolnej pamięci zależy od tego, czy liczysz bufory i pamięć podręczną, czy też liczysz swap, czy nie.

To powinno dać ci wystarczająco dużo, aby obliczyć procent według własnego uznania.


Oto wyniki top i free:

$ 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

Możesz zobaczyć, w jaki sposób top i free zgadzają się (choć z niewielką różnicą - jest to maszyna dla wielu użytkowników, w której odzwierciedlone jest wykorzystanie pamięci przez najlepsze i darmowe programy).


Dodaj „-s”, gdy wywołasz vmstate, a zobaczysz prawie takie same dane wyjściowe, tylko w innej formie:

$ 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

Widać, że vmstat pokazuje wszystkie te same liczby jako wolne.

Evan Anderson
źródło
Najlepsza odpowiedź, jaką znalazłem na ten skomplikowany temat!
rinogo
2

Mam z tobą to samo pytanie i opracowałem formułę

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}'

Przetestowałem to na wersji vmstat z procps-ng 3.3.10 i vmstat z procps-ng 3.3.9

Chienchi Lo
źródło
1

Zalecam przeczytanie niniejszej instrukcji IBM Redbook „Linux Performance and and Tuning Guidelines” ( http://www.redbooks.ibm.com/abstracts/redp4285.html?Open ). Zawiera szczegółowe informacje na temat danych zwracanych przez wiele poleceń i powinno ci pomóc.

Zazwyczaj używałem polecenia „darmowy” w systemie Linux lub „cat / proc / meminfo”.

Aaron Bush
źródło
0

Oto funkcja powłoki POSIX, która zaokrągla żądaną wartość procentową w dół do najbliższej liczby całkowitej (dla celów skryptowych może to być bardziej przydatne, ponieważ testy porównania arytmetycznej powłoki POSIX działają tylko z liczbami całkowitymi):

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

Dane wyjściowe (w moim systemie):

12

To samo z free:

furp() { free | { read z; read a b c d; echo $((100*$c/$b)) ; } }
agc
źródło