在 Linux 中,据说平均负载为 1 分钟/5 分钟/15 分钟。内核使用的公式实际上是一个指数移动平均线。
如果我们将cpuload(1)
定义为cpu负载1min的第一次计算,将active()
定义为返回处于“running”状态的进程数的函数"或 "runnable",那么内核用来计算第 nth cpu 负载 1min 的公式是:
cpuload(0)
为 0;它是第一次执行 cpuload()
之前存储在内存中的值。
我的问题是,权重 2-5.log2(e)/60 是如何选择的?在我看来,2-5/60 会更好,因为 1 分钟是进程数的半衰期(因为 (2-5/60) 12 = 1/2)。
除了上面的递归定义之外,如果我发布 cpuload(n)
的显式公式可能会有所帮助(右键单击以查看全尺寸):
最佳答案
考虑一个特定的负载样本 active(K),以及该样本对 cpuload(K+d) 的贡献有多大,以增加 d< 的值/em>。有几个关键观察结果:
- 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 分钟后忘记过去。
关于linux - linux 负载计算中的权重是如何选择的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5892104/