在
Linux中,负载平均值为1分钟/ 5分钟/ 15分钟.内核使用的公式实际上是指数移动平均线.
如果我们将cpuload(1)定义为cpu负载1min的第一次计算,并且将()作为返回系统状态“运行”或“可运行”中的进程数的函数,则内核使用的公式计算第n个cpu负载1min是:
cpuload(0)为0;它是在第一次执行cpuload()之前存储在内存中的值.
我的问题是,如何选择权重2-5.log2(e)/ 60?在我看来,2-5 / 60将会更好,因为1分钟将是进程数的半衰期(因为(2-5 / 60)12 = 1/2).
如果我发布cpuload(n)的显式公式,除了上面的递归定义(右键单击以查看它的全尺寸)也是有帮助的:
解决方法
考虑特定的负载样本活动(K),以及多少该样本对cpuload(K d)贡献,以增加d的值.有几个关键的观察:
>活动(K)乘以一些权重W(d)以确定其对cpuload(K d)的贡献.
> W(d)总是小于1.
> W(d)随d增加而呈指数下降.
>计算机算术具有有限的精度.
这些点意味着有一些dmin使得对于d> dmin,活动(K)W(d)= 0并且因此活动(K)对cpu负载(K d)没有影响.简而言之,cpuload(n)仅受前面样本dmin的影响.
另一种看待这种情况的方法是,cpuload(n)在一段时间定义之后忘记数据
>衰减指数,定义dmin,和
>采样频率.
这个最终解释给出了1分钟,5分钟和15分钟负载平均值的含义.选择衰减和采样间隔,使得这些负载平均值分别在1,5和15分钟之后忘记过去.