如何使用vmstat获取内存使用百分比?


9

我需要从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” +“免费” +“ buff” +“缓存”,总计为1620612?

系统的可用内存量是多少?是否显示为“免费”列中的45396?

问题是他们没有加起来,甚至看起来都不接近“最高”报告的内容。我与上面的“ vmstat”大致相同的时间是“ top”的输出:

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

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

为此,我需要使用“ vmstat”,而不是其他命令,因为这是要求。

因此,理想情况下,我想从“ vmstat”中获得的是内存使用百分比,如下所示:

<used_memory>/<total_memory> * 100%.

谢谢!


Answers:


20

您正在寻找的是“免费”的输出:

$ 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是缓冲区(第五列,第一行),而592484KB(第六列,第一行)是高速缓存,剩下144840KB(第二列,第二行)的物理内存供活动进程使用。

如果您认为缓冲区和高速缓存使用的内存可以用于进程,那么将有630716KB(第三列,第二行)的物理内存可用。

正如我所说,交换分区为500344KB(第一列,底部行)。交换文件正在使用21972KB(第二列,底行),剩下478372KB(第三列,底行)可用。

因此,您对可用内存百分比的定义取决于您是否在计算缓冲区和高速缓存,以及是否在计算交换。

这应该使您有足够的能力继续计算合适的百分比。


这是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。


关于这个令人困惑的主题,我找到了最佳答案!
rinogo

2

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

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上进行了测试



0

这是一个POSIX shell函数,该函数将所需的百分比舍入到最接近的整数(出于脚本编写目的,这可能会更有用,因为POSIX shell算术比较测试仅适用于整数):

# 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)) ; } }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.