Bagaimana cara mendapatkan% penggunaan memori dengan vmstat?

9

Saya perlu mendapatkan penggunaan memori dalam% dari vmstat, tapi saya tidak begitu mengerti beberapa angka yang berkaitan dengan memori yang ditampilkan di vmstat.

Secara khusus, diberi output seperti ini

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

Berapa jumlah total memori sistem? Apakah 'swpd' + 'gratis' + 'buff' + 'cache', yang berjumlah total 1620612?

Berapa jumlah memori bebas dari sistem? Apakah 45396, seperti yang ditampilkan di kolom 'gratis'?

Masalahnya adalah mereka tidak menambahkan atau bahkan melihat dekat dengan apa yang dilaporkan 'atas'. Output dari 'top' yang saya ambil sekitar waktu yang sama dengan 'vmstat di atas adalah:

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

Jadi ... saya berasumsi pasti ada angka / opsi tersembunyi di 'vmstat' yang tidak saya ketahui?

Saya perlu menggunakan 'vmstat' untuk tujuan ini dan bukan perintah lain karena ini adalah persyaratan yang dinyatakan.

Jadi idealnya, apa yang ingin saya capai dari 'vmstat' adalah penggunaan% memori, seperti pada:

<used_memory>/<total_memory> * 100%.

Terima kasih!

Nya
sumber

Jawaban:

20

Apa yang Anda cari adalah output dari "gratis":

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

Inilah tur:

Ini adalah kotak w / 768MB RAM fisik dan partisi swap 500344KB.

759456KB "digunakan" (kolom kedua, baris atas). Dari memori "bekas" ini, 23132KB adalah buffer (kolom 5, baris atas) dan 592484KB (kolom keenam, baris atas) adalah cache, meninggalkan memori fisik 144840KB (kolom ke-2, baris ke-2) yang digunakan oleh proses aktif.

Ketika Anda menganggap bahwa memori yang digunakan oleh buffer dan cache dapat digunakan untuk proses, yang membuat 630716KB (kolom ke-3, baris ke-2) dari memori fisik bebas.

Partisi swap, seperti yang saya katakan, adalah 500344KB (kolom 1, baris bawah). 21972KB (kolom 2, baris bawah) dari file swap sedang digunakan, meninggalkan 478372KB (kolom 3, baris bawah) gratis.

Jadi, definisi Anda% memori bebas tergantung pada apakah Anda menghitung buffer dan cache atau tidak, dan apakah Anda menghitung swap atau tidak.

Itu seharusnya memberi Anda cukup untuk melanjutkan untuk menghitung persentase sesuai keinginan Anda.


Inilah output top dan gratis:

$ 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

Anda dapat melihat bagaimana persetujuan atas dan bebas (meskipun dengan sedikit perbedaan - ini adalah mesin multi-pengguna dan penggunaan memori program teratas dan gratis tercermin di sana).


Tambahkan "-s" saat Anda memanggil vmstate, dan Anda akan melihat banyak keluaran yang sama, hanya dalam bentuk yang berbeda:

$ 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

Anda dapat melihat bahwa vmstat menampilkan semua angka yang sama dengan gratis.

Evan Anderson
sumber
Jawaban terbaik yang saya temukan pada subjek yang berbelit-belit ini!
rinogo
2

Saya memiliki pertanyaan yang sama dengan Anda dan menghasilkan formula

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

Saya telah mengujinya pada versi vmstat dari procps-ng 3.3.10 dan vmstat dari procps-ng 3.3.9

Chienchi Lo
sumber
1

Saya akan merekomendasikan agar Anda membaca IBM Redbook ini "Pedoman Kinerja dan Penyesuaian Linux" ( http://www.redbooks.ibm.com/abstracts/redp4285.html?Open ). Ini memiliki detail pada data yang dikembalikan oleh banyak perintah dan akan membantu Anda.

Saya biasanya menggunakan perintah "gratis" di Linux atau "cat / proc / meminfo".

Aaron Bush
sumber
0

Berikut adalah fungsi shell POSIX yang membulatkan persen yang diinginkan ke bilangan bulat terdekat (untuk tujuan penulisan ini mungkin lebih bermanfaat, karena tes perbandingan aritmatika shell POSIX hanya bekerja dengan bilangan bulat):

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

Output (di sistem saya):

12

Hal yang sama, dengan free:

furp() { free | { read z; read a b c d; echo $((100*$c/$b)) ; } }
agc
sumber