如何获得%内存使用与vmstat?

我需要从vmstat获得%的内存使用量,但是我不太了解与vmstat中显示的内存有关的一些数字。

特别是,像这样的输出

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ rb 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 

系统的总内存量是多less? 是'swpd'+'free'+'buff'+'cache',总数是1620612?

系统的内存量是多less? 它是45396,如“免费”栏所示?

问题是他们没有加起来,甚至看起来接近于“最高”的报道。 与上面vmstat同时发生的'top'的输出是:

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

所以…我假设在'vmstat'中必须有隐藏的数字/选项,我不知道?

我需要使用'vmstat'来达到这个目的,而不是其他的命令,因为这就是要求所说的。

所以理想情况下,我想从'vmstat'实现的是%内存使用情况,如下所示:

 <used_memory>/<total_memory> * 100%. 

谢谢!

你要找的是“免费”的输出:

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

这是一个旅游:

这是一个带有768MB物理RAM和500344KB交换分区的盒子。

759456KB是“使用”(第二列,顶行)。 在这个“已使用”内存中,23132KB是缓冲区(第5列,第一行)和592484KB(第六列,第一行)是caching,剩余的活动进程正在使用的物理内存为144840KB(第二列,第二列)。

如果考虑到缓冲区和高速caching使用的内存可以用于进程,则可以释放630716KB(第3列,第2列)的物理内存。

正如我所说,交换分区是500344KB(第一列,最下面一行)。 交换文件的21972KB(第2列,最下一行)正在使用中,剩下478372KB(第3列,最下一行)。

所以,你的空闲内存的定义取决于你是否在计算缓冲区和caching,不pipe你是否在计算交换。

这应该足以让你继续计算你认为合适的百分比。


这是顶部和免费的输出:

 $ 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 

你可以看到最高和自由的同意(虽然有点不同 – 这是一个多用户机器,顶部和免费程序的内存使用情况反映在那里)。


当你调用vmstate的时候添加一个“-s”,你会看到很多相同的输出,只是以不同的forms:

 $ 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显示所有相同的数字是免费的。

我build议您阅读本IBM红皮书“Linux性能和调优指南”( http://www.redbooks.ibm.com/abstracts/redp4285.html?Open )。 它有关于众多命令返回的数据的详细信息,并应该帮助你。

我通常在Linux中使用“free”命令或“cat / proc / meminfo”。

我也有同样的问题,并提出一个公式

 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进行了testing