您好,我正在使用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
通常的嫌疑人是:
vmstat
可能无法处理计数器的包装,计数器不应频繁包装,并且它应该在用户/系统/空闲中比 iowait 中发生更多(对于正常负载)vmstat
无法解析/proc/stat
,这可能是直接或间接由于 64 位数据类型造成的,或者由于宽/缺失/合并字段而导致溢出或误解析- 时间扭曲扭曲了计算
内核将用户/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/vestat
:http://wiki.openvz.org/Vestat