跳过正文
  1. 文章/

【译】了解 Linux CPU 负载-您何时应该担心?

haifeiWu
作者
haifeiWu
北京后端开发者,热爱分布式系统、中间件与 AI 工程,正在深入学习 Go 与 Rust。
目录

📌 本文原发布于代码星冰乐:【译】了解 Linux CPU 负载-您何时应该担心?

您可能已经熟悉 Linux 平均负载。平均负载是 uptimetop 命令显示的三个数字-它们看起来像这样:

load average: 0.09, 0.05, 0.01

大多数人都对负载平均值的含义有所了解:三个数字代表了较长时间段内的平均值(一分钟,五分钟和十五分钟的平均值),而较低的数字更好。较高的数字表示问题或机器过载。但是,阈值是多少?什么算“好”和“坏”负载平均值?什么时候应该关注负载平均值,什么时候应该修复它?

首先,简要了解负载平均值的含义。我们将从最简单的情况开始:一台带有一个单核处理器的机器。\

📷 图注:cpu-load

The traffic analogy
#

单核 CPU 就像一条流量通道。想象您是一名桥梁操作员…有时您的桥梁太忙了,有汽车排成一行。您想让人们知道桥上的交通如何。一个像样的指标是在特定时间等待多少辆汽车。如果没有汽车在等,驶入的驾驶员知道他们可以马上驶过。如果汽车排起了队,则驾驶员知道他们要耽误时间。

那么,桥梁操作员,您将使用哪种编号系统?怎么样:

  • 0.00 表示桥上根本没有流量。实际上,介于 0.00 和 1.00 之间表示没有备份,到达的汽车将继续行驶。

  • 1.00 表示桥刚好处于满负荷状态。 一切都还不错,但是如果流量增加一点,事情就会变慢。

  • 超过 1.00 表示有备份。 多少?那么,2.00 意味着总共有两个车道的汽车-桥上一个车道,一个车道在等待。3.00 表示总共有 3 个车道的汽车-桥上 1 个车道,2 个车道在等待。等等。

这基本上是 CPU 负载。“汽车”是指使用 CPU 时间(“过桥”)或排队使用 CPU 的进程。Unix 将其称为运行队列长度:当前正在运行的进程数与正在等待(排队)的进程数之和。

就像桥梁操作员一样,您希望您的汽车/进程永远不会等待。因此,理想情况下,您的 CPU 负载应保持在 1.00 以下。就像桥梁操作员一样,如果您暂时获得高于 1.00 的峰值,您仍然可以…但是当您始终高于 1.00时,您就需要担心。

So you’re saying the ideal load is 1.00?
#

好吧,不完全是。负载为 1.00 的问题是您没有余量。实际上,许多系统管理员会在 0.70 处画一条线:

  • “需要研究”的经验法则:0.70 如果平均负载保持在 0.70 以上,那么应该在情况变得更糟之前进行调查。

  • “立即解决”的经验法则是:1.00。如果平均负载保持在 1.00 以上,请查找问题并立即解决。否则,您将在半夜醒来,这将不会很有趣。

  • “ Arrgh,这是 WTF 3AM?” 经验法则:5.0。如果平均负载高于 5.00,则可能会遇到严重的麻烦,盒子要么挂着要么减速,这将(莫名其妙地)发生在最坏的时间,例如深夜或当您正在开会时。不要让它到达那里。

What about Multi-processors? My load says 3.00, but things are running fine!
#

有一个四处理器系统?3.00 负载仍然很健康。

在多处理器系统上,负载是相对于可用处理器核心数量而言的。在单核系统上,“ 100%利用率”标记是 1.00,在双核上是 2.00,在四核上是 4.00,依此类推。

如果再回到桥梁类比,“ 1.00”实际上意味着“一个车道的通行价值”。在单车道的桥上,这意味着它已被填满。在两车道的桥上,负载为 1.00 表示其容量为 50%-只有一个车道已满,因此还有一整条车道可以填满。

与 CPU 相同:1.00 的负载意味着单核机器上的 CPU 利用率为 100%。在双核计算机上,负载为 2.00 就是 100%CPU 使用率。

Multicore vs. multiprocessor
#

既然说到这个话题,让我们谈谈多核与多处理器。出于性能目的,具有单个双核处理器的计算机是否基本上等同于具有两个具有一个内核的处理器的计算机?是的,大致如此。关于缓存的数量,处理器之间的进程切换频率等,这里有很多微妙之处。尽管有这些细微之处,但为了确定 CPU 负载值,内核总数是重要的,无论这些内核分布在多少个物理处理器上。

这引出了两个新的经验法则:

-“核数=最大负载”经验法则:在多核系统上,您的负载不应超过可用核数。

-“核心就是核心”经验法则:核心在 CPU 上的分布方式无关紧要。两个四核==四个双核==八个单核。这些都是八个核心。

Bringing It Home
#

让我们看一下 uptime 的平均负载输出:\

~ $ uptime
23:05 up 14 days, 6:08, 7 users, load averages: 0.65 0.42 0.36

这是在双核 CPU 上,因此我们有很大的余量。在负载达到并保持在 1.7 左右之前,我甚至不会考虑它。

现在,那三个数字呢?0.65 是最近一分钟的平均值,0.42 是最近五分钟的平均值,而 0.36 是最近 15分钟的平均值。这使我们想到了一个问题:

我应该观察哪个平均值?1、5 或 15分钟?

对于我们已经讨论过的数字(1.00 =立即修复,依此类推),您应该查看 5 或 15分钟的平均值。坦白说,如果您的负载平均值在一分钟内达到 1.0 以上的峰值,您还是可以的。这是 15分钟平均值超过 1.0 并保持在该水平上的时间。(显然,据我们了解,将这些数字调整为系统具有的处理器核心数量)。

因此,核的数量对于解释平均负载很重要……我如何知道我的系统有多少个核?

cat / proc / cpuinfo 可获取系统中每个处理器的信息。注意:在 OSX 上不可用,但可以求助 Google。要获得一个计数,请通过 grep 和单词计数运行它:grep’模型名称’/ proc / cpuinfo | wc -l

参考文档
#

原文链接

Wikipedia - A good, brief explanation of Load Average

Linux Journal - very well-written article

相关文章