虚拟机上的 vmstat 和大值

虚拟机上的 vmstat 和大值

您好,我正在使用vmstat一些测试期间跟踪机器性能(jmeter)。这是在一台大机器上运行的虚拟机,其中安装了许多其他虚拟机(大约 20 个虚拟机)。

我正在使用以下软件版本:

$ vmstat -V
procps version 3.2.7  

$ uname -a
 Linux cmbpm 2.6.32-042stab044.11 #1 SMP Wed Dec 14 16:02:00 MSK 2011 x86_64 x86_64 x86_64 GNU/Linux

问题在于我得到的结果,这是一个示例(我已将空格转换为单个制表符以便于数据处理):

procs   -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd    free    buff    cache   si  so  bi  bo  in  cs  us  sy  id  wa  st
 0  0   1506720 6152768 0   824836  1   0   3   2   0   0   0   0   94  6   0
 0  0   1506720 6170744 0   804392  60  64  14  16  0   122651  0   0   98  2   0
 0  1   1506720 6168328 0   801744  145 8   300 52  0   117308  0   0   0   100 0
 0  0   1505688 6173360 0   806852  233 13  1135    478 0   109158  1   0   387 1171860851  0
 0  0   1505172 6168988 0   810140  380 0   0   513 0   117875  0   0   97  3   0

问题是有些值比应有的值大得多。 CPU 时间(-----cpu------部分)的百分比值有时大大超过 100%。尤其是列wa(等待数据)是有问题的(值1171860851极其奇怪)。将这些巨大的值替换为零会给出合理的结果。

我的问题是为什么它给出的值不正确并且可以以某种方式修复吗?
我怀疑机器的虚拟化是这里的问题。

答案1

通常的嫌疑人是:

  1. vmstat可能无法处理计数器的包装,计数器不应频繁包装,并且它应该在用户/系统/空闲中比 iowait 中发生更多(对于正常负载)
  2. vmstat无法解析/proc/stat,这可能是直接或间接由于 64 位数据类型造成的,或者由于宽/缺失/合并字段而导致溢出或误解析
  3. 时间扭曲扭曲了计算

内核将用户/nice/系统/等作为计数器进行跟踪(通常为 100/CPU),vmstat而其他程序则根据时间增量计算平均值,例如 5 秒vmstat 5。准确的时间在虚拟环境中可能是一个问题,尽管没有所描述的特定症状(vmstat使用相同的时间戳计算这些数字)

检查了 procps/libproc 后,它读取/proc/stat为 long-long 整数,并使用双精度浮点数进行计算——我看不出有任何问题。

您正在运行 OpenVZ 内核,您应该检查其/proc/stats格式是否正确,可能是这个错误:https://bugzilla.openvz.org/show_bug.cgi?id=1376 你可能有更好的解析运气/proc/vz/vestathttp://wiki.openvz.org/Vestat

相关内容