web-dev-qa-db-ja.com

vmstatでメモリ使用率を取得する方法は?

Vmstatからメモリ使用率を%で取得する必要がありますが、vmstatに表示されるメモリに関連するいくつかの数値がよくわかりません。

特に、このような出力が与えられた

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

システムの総メモリ量はどれくらいですか?それは 'swpd' + 'free' + 'buff' + 'cache'で、合計は1620612ですか?

システムの空きメモリ量はどれくらいですか? 「無料」列に表示されている45396ですか?

問題は、それらが合計されないか、「トップ」が報告したものに近くさえ見えないことです。上記の「vmstat」とほぼ同じ時間に取得した「top」の出力は次のとおりです。

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

だから...私は知らなかった 'vmstat'に隠された数字/オプションがあるはずだと思いますか?

この目的のために「vmstat」を使用する必要がありますが、これは要件が述べているとおりなので、他のコマンドでは使用しません。

したがって、理想的には、「vmstat」から達成したいのは、次のようなメモリ使用率です。

<used_memory>/<total_memory> * 100%.

ありがとう!

9
His

あなたが探しているのは「無料」からの出力です:

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

ここにツアーがあります:

これは、768 MBの物理的なRAM=および500344KBのスワップパーティションを含むボックスです。

759456KBは「使用済み」です(2列目の一番上の行)。この「使用済み」メモリのうち、23132KBはバッファ(5列目、上行)であり、592484KB(6列目、上行)はキャッシュであり、アクティブプロセスで使用されている物理メモリは144840KB(2列目、2行目)残ります。

バッファとキャッシュが使用するメモリをプロセスに使用できると考えると、630716KB(3列目、2行目)の物理メモリが解放されます。

私が言ったように、スワップパーティションは500344KB(最初の列、一番下の行)です。スワップファイルの21972KB(2列目、一番下の行)は使用中で、478372KB(3列目、一番下の行)は空いています。

したがって、空きメモリの%の定義は、バッファとキャッシュをカウントしているかどうか、およびスワップをカウントしているかどうかによって異なります。

これで、必要に応じてパーセンテージを計算することができます。


これがtopと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

Topとfreeがどのように一致するかを確認できます(多少の違いはありますが、これはマルチユーザーマシンであり、topとfreeプログラムのメモリ使用量はそこに反映されます)。


Vmstateを呼び出すときに「-s」を追加すると、ほとんど同じ出力が別の形式で表示されます。

$ 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がfreeと同じ数値をすべて表示していることがわかります。

20
Evan Anderson

あなたと同じ質問があり、式を考え出します

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

Procps-ng 3.3.10のvmstatバージョンとprocps-ng 3.3.9のvmstatでテストしました

2
Chienchi Lo

このIBMレッドブック「Linuxのパフォーマンスとチューニングのガイドライン」( http://www.redbooks.ibm.com/abstracts/redp4285.html?Open )を一読することをお勧めします。多数のコマンドによって返されるデータの詳細があり、役立つはずです。

私は通常、Linuxまたは「cat/proc/meminfo」で「free」コマンドを使用しました。

1
Aaron Bush

これが[〜#〜] posix [〜#〜]希望するパーセントを最も近い整数に切り捨てるシェル関数です(スクリプトの目的では、これは[〜# 〜] posix [〜#〜]シェル算術比較テストは整数でのみ機能します):

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

出力(私のシステム上):

12

同じこと、freeを使用:

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