任何 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。