我需要从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%.
谢谢!
解决方法
您正在寻找的是“免费”的输出:
$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(第六列,顶行)是缓存,剩下144840KB(第2列,第2行)的活动进程正在使用的物理内存.
当您考虑缓冲区和缓存使用的内存可用于进程时,可以释放630716KB(第3列,第2行)物理内存.
正如我所说,交换分区是500344KB(第1列,底行).交换文件的21972KB(第2列,底行)正在使用中,留下478372KB(第3列,底行)空闲.
因此,你对%free memory的定义取决于你是否计算缓冲区和缓存,以及你是否计算交换.
这应该足以让你继续计算你认为合适的百分比.
这是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是如何达成一致的(虽然有点不同 – 这是一个多用户机器,顶级和免费程序的内存使用情况也反映在那里).
当你调用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显示的所有数字都是免费的.