按照此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
然而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
我缺少什么?我预计最大负载为 2 * 4 * 1 = 8(100% 使用时)? (还有,是不是太高了?)
答案1
TL;DR,23 可能太高了。
考虑负载的最简单方法是“队列中使用 CPU 的进程数”。如果负载与 CPU 数量完全匹配,则需要 CPU 的进程数量与可用 CPU 完全匹配,并且您的使用情况是理想的。如果负载是更高大于可用 CPU 的数量,则某些进程必须等待 CPU 可用,并且您无法实现理想的吞吐量,因为您没有足够的资源。如果负载低于 CPU 数量,则某些 CPU 处于空闲状态,您可能可以从此设备获得更多吞吐量。
它是一个有用的 CPU 使用计数器,因为它可以告诉您超额订阅的情况; CPU 使用率会告诉您瞬时消耗,但如果所有核心都以 100% 运行,这实际上可能是理想的 - 这里重要的是平均负载,它会告诉您队列有多大。打个比方,麦当劳有一个员工100%为顾客服务是可以的,重要的是有多少人在等待服务。这就是平均负载告诉你的。
当然,这是一种简化,其中存在很多技术细节和微妙之处,但对于我们 95% 的人来说,这是一个足够好的规则来衡量系统的需求并解释平均负载告诉您的信息。
答案2
平均负载为 1 意味着单个 cpu 或核心在过去 X 分钟内 100% 繁忙(取决于 1 的位置,假设它位于第一个位置,因此 1 分钟)
因此,对于 4 个核心,平均负载为 4 xx 表示所有核心都已 100% 繁忙。即使假设所有正在完成的工作都适合超线程,100% 繁忙也将是 8 xx 的 LA ...
这可能令人感兴趣 -https://www.howtoing.com/understand-linux-load-averages-and-monitor-performance/