当我发出不带任何参数的 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
7 117 0 719328 1251624 258624672 0 0 346 64 0 0 4 0 92 3 0
如您所见,CPU 空闲率为 92%。无论我发出命令多少次,我都会得到类似的结果。
但是当我使用时间间隔参数发出 vmstat 时,cpu 空闲值立即下降:
# vmstat 5
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
385 0 0 145380064 1457188 115708528 0 0 346 64 0 0 4 0 92 3 0
417 0 0 144694256 1457204 116388928 0 0 0 49 1122 528500 84 5 12 0 0
413 0 0 143960640 1457220 117117040 0 0 0 31 1127 529619 84 5 11 0 0
418 0 0 143224224 1457228 117850080 0 0 0 26 1114 530135 84 5 11 0 0
444 0 0 142483520 1457240 118587048 0 0 0 33 1112 530314 84 5 11 0 0
397 0 0 141820240 1457256 119245040 0 0 0 37 1114 531348 85 5 10 0 0
就是这样!即使我以 5 秒为间隔获得结果,CPU 空闲值也会下降约 80%!
我无法想象 vmstat 本身会消耗这么多的 CPU 能力(服务器有 32 个 Inter Xeon X7550 CPU,每个 CPU 有两个 2 核和 2 线程)。
有人能告诉我关于我损失的 %80 CPU 功率的线索吗?
答案1
从手册页中:
如果没有指定延迟,则仅打印一份包含自启动以来的平均值的报告。
您正在将机器启动以来的平均空闲时间(92%)与五秒间隔(10-12%)进行比较,这是没有意义的。