我需要从 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%.
谢谢!
您正在寻找的是“免费”的输出:
这是一个游览:
这是一个带有 768MB 物理 RAM 和 500344KB 交换分区的盒子。
759456KB 已“使用”(第二列,顶行)。在这个“已用”内存中,23132KB 是缓冲区(第 5 列,顶行),592484KB(第 6 列,顶行)是高速缓存,剩下 144840KB(第 2 列,第 2 行)物理内存正在被活动进程使用。
当您考虑缓冲区和高速缓存使用的内存可用于进程时,剩下 630716KB(第 3 列,第 2 行)物理内存可用。
正如我所说,交换分区是 500344KB(第一列,底行)。交换文件的 21972KB(第 2 列,底行)正在使用中,剩余 478372KB(第 3 列,底行)空闲。
因此,您对可用内存百分比的定义取决于您是否计算缓冲区和缓存,以及是否计算交换。
这应该足以让您继续计算您认为合适的百分比。
这是 top 和 free 的输出:
您可以看到 top 和 free 是如何达成一致的(尽管有一点不同——这是一台多用户机器,并且 top 和 free 程序的内存使用情况都反映在其中)。
调用 vmstate 时添加一个“-s”,您将看到几乎相同的输出,只是形式不同:
您可以看到 vmstat 将所有相同的数字显示为空闲。
我和你有同样的问题并想出一个公式
我已经在 procps-ng 3.3.10 的 vmstat 版本和 procps-ng 3.3.9 的 vmstat 上对其进行了测试
我建议您通读这本 IBM 红皮书“Linux 性能和调优指南”(http://www.redbooks.ibm.com/abstracts/redp4285.html?Open)。它包含许多命令返回的数据的详细信息,应该对您有所帮助。
我通常在 Linux 中使用“free”命令或“cat /proc/meminfo”。
这是一个POSIX shell 函数,它将所需的百分比向下舍入到最接近的整数(出于脚本目的,这可能更有用,因为POSIX shell 算术比较测试仅适用于整数):
输出(在我的系统上):
同样的事情,与
free
: