在Linux中,平均负载是1分钟/ 5分钟/ 15分钟。 内核使用的公式实际上是一个指数移动平均值。
如果我们将cpuload(1)
定义为CPU负载1min的第一个计算,而active()
作为返回系统中状态为“running”或“runnable”的进程数的函数,那么内核使用的公式计算第n个 CPU的负载1min是:
cpuload(0)
是0; 它是在第一次执行cpuload()
之前存储在内存中的值。
我的问题是,如何select权重2 -5.log2(e)/ 60 ? 在我看来,2 – 5/60会更好,因为1分钟将是过程数的半衰期(因为(2 -5/60 ) 12 = 1/2)。
也许这是有帮助的,除了上面的recursion定义之外,我发布了cpuload(n)
的显式公式(单击鼠标右键以查看全尺寸):
考虑一个特定的负载样本活动(K) ,以及该样本对于增加d值的贡献大小(K + d) 。 有几个关键的意见:
在一起,这些点意味着有dmin这样d> dmin , 活动(K)W(d)= 0 ,所以活动(K)对Cpuload(K + d)没有影响。 简而言之, cpuload(n)只受到dmin先前样本的影响。
另一种看待这个问题的方法是cpuload(n)在一段时间后忘记数据
最后的解释给出了1分钟,5分钟和15分钟的平均负载的含义。 选择衰减和采样间隔,使得这些负载平均分别在1分钟,5分钟和15分钟后忘记过去。
我猜他们希望一个正在运行的进程的贡献的平均寿命是一分钟。