Linux 系统负载中的奇怪值

Linux 系统负载中的奇怪值

我正在尝试了解一台Linux服务器上的系统负载:

$uptime 15:01:45 up 52 days, 19:48, 1 user, load average: 0.63, 1.76, 4.81

负载始终为 1 分钟 < 5 分钟 < 15 分钟。

Distributor ID: RedHatEnterpriseServer Release: 5.8

我捕获了uptime大约 30 分钟的每秒数据,结果总是报告 1 分钟平均值低于 5 分钟和 15 分钟。根据我对系统负载值的理解,这应该是不可能的。似乎报告的数字更高,并且增加了一些常数。

这怎么可能?这意味着什么?

答案1

我认为您可能误解了“平均负载”的工作原理。首先,它不是系统“负载”,而是系统“平均负载”——两者有很大区别,因为这些数字都是平均值(意味着跨越多个记录和时间)!此外,了解系统上的 CPU 数量也非常重要,因为这会影响如何解释数字(请注意当今时代的核心)。

还要注意,您不能将这些数字用作“CPU 使用率”,就像您在 Windows 等中知道的那样。它们是平均值,基于进程等待时间和 CPU 使用率。

正如您所写的,平均负载数字可以描述如下。

(请注意我不使用 > 也不使用 < 因为我认为它可能会产生误导。)

  • 最后 1 分钟
  • 最后 5 分钟
  • 最后 15 分钟内

让我们在我的小型双 CPU(核心)系统上进行测试。

我运行命令“stress -c 1”来最大化 1 个 cpu(核心)并让它运行 5、10、30 分钟(CPU 使用时间可能更少,因此数字略有偏差)。

这就是我的平均负载的样子。

 5 MIN - load average: 1,00, 0,71, 0,37
10 MIN - load average: 1,02, 0,94, 0,59
30 MIN - load average: 1,01, 1,03, 0,98

那么这些数字是什么意思呢?假设它是在双 CPU(核心)系统上,你可以取第一个数字 1,00,这告诉我们系统使用率为 50%,因为我们知道它有两个 CPU,因此如果数字是 2,00,那么我们使用系统率为 100%,十进制数字告诉你等待进程的过载情况。

  • 在过去 1 分钟内:计算机平均过载 0%,平均有一个 CPU 完全使用。也就是说,在正常 CPU 负载条件下,系统使用率为 50%。

等等。让我们进行相同的运行,但两个 CPU 都处于负载状态,并添加一个额外的子进程试图获取资源。在这种情况下,我试图使用超过系统可以处理的资源。

仅 3 分钟,我的负载就已经让我尖叫了!现在我不会让它运行更长时间,因为它是一个小型路由器,可以更轻松地测试负载,所以它会变热 :)

3 MIN - load average: 2,48, 0,99, 0,74

现在让我们取 1 分钟的平均数 2.48。这现在告诉我们什么?好吧,我们正在使用系统的 248%,我们知道我们可以使用两个 CPU(200%),因此系统超载了 48%,这意味着平均有 0.48 个进程在等待 CPU 使用时间,因为两个 CPU 都处于完全繁忙状态。但如果这是一个 4 CPU(核心)系统,那么数字就相当不错了,因为我们再次只使用了 50% 的系统。

我希望这一切都说得通,而且不同发行版的内核对平均负载的解释方式可能存在细微差异,但并不像您想象的那样。这是内核查看进程所处状态的方式。例如 cpu_idle、cpu_waiting、io_waiting 等。因此 NFS fs 可以让进程等待 io 等。我认为 RedHat 并没有做任何特别的事情。

编辑:如果您想查看系统的整体 CPU 使用率,您可能需要使用命令“top”。Top 还显示平均负载。

相关内容