在Linux中,平均负载据说为1min/5min/15min。内核使用的公式实际上是指数移动平均值。

如果我们将cpuload(1)定义为1min的cpu负载的第一个计算,并将active()定义为返回系统上状态为“正在运行”或“可运行”的进程数的函数,则内核使用的公式将计算第n个cpu负载1分钟是:
cpuload(0)为0;它是第一次执行cpuload()之前存储在内存中的值。

我的问题是,如何选择权重2-5.log2(e)/60?在我看来,2-5/60会更好,因为1分钟是进程数的半衰期(因为(2-5/60)12 = 1/2)。

如果我除了上面的递归定义外还发布了cpuload(n)的显式公式,这可能会有所帮助(右键单击以查看完整尺寸):

最佳答案

考虑增加d值的特定负载样本active(K),以及该样本对cpuload(K + d)的贡献。有一些主要的观察结果:

  • active(K)乘以某个权重W(d),以确定其对cpuload(K + d)的贡献。
  • W(d)始终小于一。
  • W(d)随着d的增加呈指数下降。
  • 计算机算法具有有限的精度。

  • 这些点加在一起意味着存在一些dmin,使得对于d> dmin,active(K)W(d)= 0,因此active(K)对cpuload(K + d)没有影响。简而言之,cpuload(n)仅受dmin先前样本的影响。

    另一种看待这种情况的方式是cpuload(n)在定义的时间后忘记了数据
  • 定义dmin和
  • 的衰减指数
  • 的采样频率。

  • 最终解释给出了1分钟,5分钟和15分钟平均负载的含义。选择衰减和采样间隔,以使这些平均负载分别在1分钟,5分钟和15分钟后忘记过去。

    10-08 11:34