Linux 中的平均负载

任何 Linux 管理员最重要的任务之一包括性能监控,其中包括参数“平均负载”或者“CPU 负载”。

负载平均值是表示特定时间段内系统负载的值。
也可以将其视为活动任务数与可用 CPU 数的比率。

如何检查?

我们可以使用 top 或者 uptime 命令查看平均负载。
输出如下所示

# uptime
00:07:00 up 4 days, 6:14, 1 user, load average: 0.11, 0.14, 0.09
# top
top - 00:07:12 up 4 days, 6:15, 1 user, load average: 0.09, 0.13, 0.09

这三个值是什么?

如我们所见,三个值代表平均负载列。
这些显示了系统在很长一段时间内的负载(一分钟或者当前,五分钟和十五分钟的平均值)。

你怎么知道你的系统有高负载?

在大多数情况下,最重要的问题是我已经看到我们如何确定系统具有高负载。

高值是否代表高平均负载并且系统需要注意?

平均负载的阈值是多少?

我们如何断定负载平均值是好是坏?

在回答这些问题之前,先让我们了解一下多核多处理器CPU。

早期的中央处理单元曾经只有一个处理器,而且当时的核心概念不是他们的。
但是随着技术的进步和满足 IT 行业需求的更高速度的要求,多个处理器集成在同一 CPU 中,使其成为多处理器。

然而增加没有。
处理器确实提高了许多任务的工作速度和性能,但也导致了尺寸、复杂性和散热问题的增加。
因此,为了继续提高性能,引入了核心概念。

不是有两个 CPU 和一个能够承载它们的主板,而是将两个 CPU 放在一起并组合成一个双核处理器,该处理器将使用单个插槽,使用更少的功率和尺寸,能够执行与双处理器 CPU 相同的任务量。

底线是负载值取决于编号。
我们机器中的核心数。
例如,双核与 2 个处理器或者 2 个核相关,而四核与 4 个处理器或者 4 个核相关,作为负载的最大值。

怎么查号我的 Linux 系统上的核心数?

物理 CPU 的数量
以下命令将显示系统有多少活动物理处理器。

示例:如果此数字为 2,则可能会打开系统机箱并用手移除 2 个物理处理器。

# grep physical.id /proc/cpuinfo | sort -u | wc -l
2

每个 CPU 的内核数
在具有多核处理器的系统上,以下命令应报告每个物理处理器的 CPU 核数(尽管在极少数情况下可能不会)。

示例:如果此数字为 8,物理 CPU 为 2,则 2 个物理处理器中的每一个都有 8 个 CPU 内核,因此总共有 16 个内核。

# grep cpu.cores /proc/cpuinfo | sort -u
cpu cores : 8

逻辑处理器数量
最后一条命令将显示 Linux 内核看到的“逻辑”处理器总数。
这个数字通常是三个统计数据中最重要的。
它是处理器的有效数量——就操作系统而言,这是可以在任何给定微秒内工作的不同 CPU 的数量。

示例:继续上面的示例场景,下面看到的数字可能是 16,而不是 8.
简单地说,如果此命令显示的数字与 CPU 内核总数不同,那是因为 CPU 上启用了超线程,进一步将每个核心(在本例中,分成 2 个可用的“线程”)。

# grep processor /proc/cpuinfo | wc -l
16

如何检查超线程是启用还是禁用?

回到我们的首要问题

了解平均负载

如果与可用 CPU 内核相比,使用 CPU 的活动任务的数量较少,那么平均负载可以被认为是正常的,但如果不是。
相对于可用的 CPU 内核,活动任务的数量开始增加,然后平均负载将开始上升。

例如,在我的情况下,我使用一个虚拟脚本来利用我所有的 CPU 并增加负载

top - 20:29:27 up  1:41,  2 users,  load average: 11.11, 3.74, 1.44
Tasks: 257 total,  17 running, 240 sleeping,   0 stopped,   0 zombie
%Cpu(s):100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 13173656+total, 27243444 free, 10403308+used,   460040 buff/cache
KiB Swap:  4190204 total,  4190204 free,        0 used. 26855740 avail Mem
PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
22360 root      20   0  196724   5684    736 R 100.0  0.0   1:07.32 python
22361 root      20   0  196724   5684    736 R 100.0  0.0   1:07.33 python
22363 root      20   0  196724   5688    736 R 100.0  0.0   1:07.32 python
22364 root      20   0  196724   5688    736 R 100.0  0.0   1:07.32 python
22369 root      20   0  196724   5700    736 R 100.0  0.0   1:07.30 python
22371 root      20   0  196724   5704    736 R 100.0  0.0   1:07.29 python
22373 root      20   0  196724   5704    736 R 100.0  0.0   1:07.28 python
22374 root      20   0  196724   5708    736 R 100.0  0.0   1:07.26 python
22359 root      20   0  196724   5684    740 R 100.0  0.0   1:07.30 python
22362 root      20   0  196724   5688    740 R 100.0  0.0   1:07.32 python
22365 root      20   0  196724   5688    736 R 100.0  0.0   1:07.32 python
22366 root      20   0  196724   5692    736 R 100.0  0.0   1:07.32 python
22367 root      20   0  196724   5692    736 R 100.0  0.0   1:07.32 python
22368 root      20   0  196724   5692    736 R 100.0  0.0   1:07.32 python
22370 root      20   0  196724   5700    736 R 100.0  0.0   1:07.23 python
22372 root      20   0  196724   5704    736 R 100.0  0.0   1:07.29 python

因此,根据我计算的核心数,例如:16个核心,看到值11.11,虽然这很高,但我不应该太担心,除非它越过红线值,例如:我的案例为16。

日期:2020-06-02 22:17:29 来源:oir作者:oir