ubuntu 的平均负载从未低于“0.00 0.01 0.05”

ubuntu 的平均负载从未低于“0.00 0.01 0.05”

我在 ubuntu 12.04 KVM 主机上运行了几个 ubuntu 12.04 VM。那些完全空闲且没有任何服务的虚拟机(除了 syslog 和全新安装的其他“小型”标准内容)在 top/htop 中显示恒定负载“0.00 0.01 0.05”,平均为 1/5/15。

什么时候有“真实”的应用程序正在运行,平均负载表现完全正常,但它们从未低于所提到的值。

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

(请注意,在图片的右半部分,如果短时间内 > 0.05,load15 表现良好)


不幸的是,我不知道哪些诊断输出可能对您有帮助,因此这里有一些默认的内容:

# 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/s     r/s     w/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 中的一个错误吗?

多谢!

答案1

实际上,真正的原因在于 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(在输出时四舍五入为 0.05))就永远不会低于该值(这里我指的是 LA15,对于 LA5,该值可能不同)。

更多细节:

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

参考:

答案2

完全空闲且没有运行任何服务的虚拟机

事实上,这种情况不会发生;总是在 *nix 系统上运行的服务:

  • 系统日志
  • systemd/udev
  • 暴发户
  • hald/dbus
  • cron/at
  • +任意数量的内核线程

期望上述任何组合能够产生一个完全空闲的系统只是幻想。

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

相关内容