Ubuntu的平均负载从来没有低于“0.00 0.01 0.05”

我有几个在Ubuntu 12.04 KVM主机上运行的Ubuntu 12.04虚拟机。 那些完全没有服务的虚拟机(除了系统日志和新安装的其他“小”标准东西)在top / htop平均负载为“0.00 0.01 0.05”,平均为1/5/15。

有“真实”的应用程序运行时,负载平均值performance得非常正常,但是绝不会低于所提到的值。

虽然这根本不会影响性能,而且很容易被忽略,但它会以非常烦人的方式搞乱了监控图:

(注意load15在图片右半部分如果短时间> 0.05,performance的很好)

不幸的是,我不知道什么诊断输出可能对您有所帮助,所以这是一些默认的东西:

# top top - 16:31:01 up 1:05, 1 user, load average: 0.00, 0.01, 0.05 Tasks: 62 total, 1 running, 61 sleeping, 0 stopped, 0 zombie Cpu(s): 0.2%us, 0.2%sy, 0.0%ni, 99.2%id, 0.5%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1019464k total, 73452k used, 946012k free, 6140k buffers Swap: 0k total, 0k used, 0k free, 22504k cached 

 # free -m total used free shared buffers cached Mem: 995 72 923 0 6 21 -/+ buffers/cache: 43 951 Swap: 0 0 0 

 # iostat -x /dev/vda Linux 3.2.0-32-virtual (vm3) 11/15/2012 _x86_64_ (2 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.25 0.00 0.65 0.20 0.24 98.66 Device: rrqm/s wrqm/sr/sw/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util vda 0.14 0.12 0.51 0.22 6.74 1.46 22.50 0.02 23.26 20.64 29.30 7.63 0.56 

需要别的东西吗?

有没有人见过这种行为? 可能这是kvm / ubuntu / kernel 3.x中的一个bug?

非常感谢!

其实真正的原因是如何在Linux中计算负载平均值。

到目前为止,它被实现为

 static unsigned long calc_load(unsigned long load, unsigned long exp, unsigned long active) { load *= exp; load += active * (FIXED_1 - exp); load += 1UL << (FSHIFT - 1); return load >> FSHIFT; } 

如果你手动执行计算会导致你的事实,如果价值曾经超过93(93/2048 = 0.04541015625(这是四舍五入输出)四舍五入)将永远不会低于该值(这里我指的是LA15,LA5的值大概是不同的)。

一些更多细节:

https://bugzilla.kernel.org/show_bug.cgi?id=45001#c13

参考文献:

  • 常量定义

这些虚拟机完全处于空闲状态,没有服务正在运行

事实上,这不会发生。 总是有服务在* nix系统上运行:

  • 系统日志
  • systemd /的udev
  • 暴发户
  • 哈尔德/ DBUS
  • cron的/在
  • +任意数量的内核线程

期待上述的任何组合产生一个完全闲置的系统是幻想。

除此之外,计算负载平均值的逻辑可能导致1分钟显示0.00,而5分钟平均为0.01。