0.00 的平均负载如何存在?

Ner*_*nux 12 cpu-load

我知道负载平衡是一种衡量 CPU 繁忙程度的方法。但是,我不明白平均负载是0.00如何存在的。内核不是一直在运行吗?这不占用CPU负载的一部分吗?

Ale*_*exP 17

一段时间内的平均负载是在该时间段内竞争 CPU 的平均进程数。如果无事可做,“内核”就不会运行;更具体地说,如果没有什么可做的,CPU 将被分配给一个特殊的“空闲”线程,该线程不计算在内(并且它可能会做一些事情,例如将 CPU 置于等待中断的状态)。

因此,例如,超过 5 分钟的平均负载为 0.6 通常意味着在这 5 分钟内,CPU 被某些进程(或内核)总共使用了 3 分钟,并且总共使用了 2 分钟闲着。但是,正如@UKMonkey 所观察到的,这可能意味着在 4 分半钟无所作为之后,6 个进程在最后 30 秒内竞争 CPU ......

CPU 空闲是因为没有进程想要使用它来运行代码,因为所有进程要么等待输入或输出操作完成,要么正在休眠等待在未来某个时间被唤醒。

@Panther 的链接提供了对平均负载的更深入讨论。


tho*_*ter 13

平均负载是衡量 CPU 内核过载程度(就希望一次使用它的进程数而言)的指标。

以下假设为单核(单线程)CPU:

  • 0.0

    CPU 根本不做任何事情。如果一个进程开始使用 CPU,那么它将是唯一一个使用它的进程。

    CPU 空闲并不意味着没有进程在运行。例如,后台服务和内核仍在运行,并且仍在占用内存。他们只是不使用任何 CPU,因为他们什么都不做。

  • 1.0

    CPU 处于最大使用率,但进程之间对 CPU 的使用的争用为零。也就是说,只有一个进程在运行,因此它可以为自己占用 100% 的 CPU 时间。或者,多个进程正在运行,但没有一个进程声称使用 100% 的 CPU,它们的 CPU 使用率加起来为 100%。即使它们自己拥有 CPU,它们的运行速度仍然与它们的运行速度一样快。

  • 大于 1.0

    CPU 处于最大使用率,并且有多个进程想要同时使用它,因此它们实际上运行得比它们在空闲 CPU 上运行的速度要慢。例如,平均负载为 3.0 表示进程的运行速度是它们想要运行的速度的三分之一。平均负载为 50.0 表示由于所有其他进程都在运行,进程以它们想要运行的速度的 1/50 运行。也就是说,高于 1.0 的数字表明可用 CPU 在越来越多的进程之间被拉伸。

拥有多核 CPU 不会改变数字的含义,但可以改变它们的解释。例如,如果您有一个 4 核 CPU,那么 1.0 的负载仍然相当于一个进程在一个内核上使用 100% CPU,但还有其他三个内核。因此,在 4 核 CPU 上,最大效率点是 4.0,而不是 1.0 - 一切以 1/3 效率运行的点是 12.0,而不是 3.0。为了增加复杂性,单个进程可能有多个线程,每个线程都声称拥有自己的 CPU。因此,如果它是多线程的,则单个进程可以使用所有 4 个内核的 100%。

重要的提示

CPU 使用率只是可能限制进程性能的一种资源。I/O 是另一个,并且不计入 CPU 负载。使用一定数量 CPU 的进程不一定能够在负载较轻的机器上使用更多,因为它们可能会遇到其他瓶颈。

什么是最好的平均负载

这实际上取决于您在做什么以及您是否更喜欢响应性,或者让 CPU 尽可能努力地工作。

对于需要尽可能多地完成的事情,平均负载应该等于或略高于内核数。任何比这大得多的事情都表明,如果您将任务分散到更多的计算机/服务器上,您可以完成更多、更快的工作。

对于需要尽可能响应(快速反应)的东西,平均负载应该比内核数量少一个合适的裕度,例如一半或三分之一,这允许在任何减速发生之前进行一些间歇性变化。

对于虚拟化来宾(例如 KVM),平均负载越低越好,因为您实际上是与同一主机上的其他来宾共享 CPU。