linux 平均最高负载似乎太高

nha*_*nha 1 linux cpu load-average

按照这个https://unix.stackexchange.com/a/279354/108702,我跑了;

lscpu | grep -E '^Thread|^Core|^Socket|^CPU\('
CPU(s):              8
Thread(s) per core:  2
Core(s) per socket:  4
Socket(s):           1
Run Code Online (Sandbox Code Playgroud)

然而top

top - 01:06:47 up 51 days,  6:24,  2 users,  load average: 23.67, 22.50, 22.40
Tasks: 5989 total,   1 running, 5919 sleeping,   0 stopped,   0 zombie
%Cpu(s): 84.6 us,  2.7 sy,  0.0 ni, 12.3 id,  0.4 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 32799488 total,   940020 free, 18284088 used, 13575380 buff/cache
KiB Swap:        0 total,        0 free,        0 used. 14034316 avail Mem
Run Code Online (Sandbox Code Playgroud)

我缺少什么?我预计最大负载为 2 * 4 * 1 = 8(100% 使用时)?(还有,是不是太高了?)

小智 6

TL;DR,23 可能太高了。

考虑负载的最简单方法是“队列中使用 CPU 的进程数”。如果负载与 CPU 数量完全匹配,则需要 CPU 的进程数量与可用 CPU 完全匹配,并且您的使用情况是理想的。如果负载高于可用 CPU 数量,则某些进程必须等待 CPU 可用,并且您无法实现理想的吞吐量,因为您没有足够的资源。如果负载低于 CPU 数量,则某些 CPU 处于空闲状态,您可能可以从此设备获得更多吞吐量。

它是一个有用的 CPU 使用计数器,因为它可以告诉您超额订阅的情况;CPU 使用率会告诉您瞬时消耗,但如果所有核心都以 100% 运行,这实际上可能是理想的 - 这里重要的是平均负载,它会告诉您队列有多大。打个比方,麦当劳有一个员工100%为顾​​客服务是可以的,重要的是有多少人在等待服务。这就是平均负载告诉你的。

当然,这是一种简化,其中存在很多技术细节和微妙之处,但对于我们 95% 的人来说,这是一个足够好的规则来衡量系统的需求并解释平均负载告诉您的信息。