在
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分钟之后忘记过去.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。