![在这种情况下,平均负载是如何计算的?](https://linux22.com/image/118495/%E5%9C%A8%E8%BF%99%E7%A7%8D%E6%83%85%E5%86%B5%E4%B8%8B%EF%BC%8C%E5%B9%B3%E5%9D%87%E8%B4%9F%E8%BD%BD%E6%98%AF%E5%A6%82%E4%BD%95%E8%AE%A1%E7%AE%97%E7%9A%84%EF%BC%9F.png)
load average: 20.62, 18.83, 11.31
这是四核处理器上的平均负载。我正在运行的程序不仅占用CPU,还占用其他资源。
如何仅使用 CPU 来显示这些数字?
答案1
你的问题:这种情况下平均负载是如何计算的?
回答:这三位数字是不同时间序列(1、5 和 15 分钟)的指数阻尼移动平均值。此计算基于放置在处理器队列中的进程,而不是基于实际 CPU 利用率,而实际 CPU 利用率都习惯于以百分比形式查看(例如在 Windows 中)
但我认为这不是您想要了解当前系统中发生的情况的答案。
平均负载反映了“系统”负载,考虑了 CPU 负载和 I/O 等待。这是最常见的参数,您需要从该参数开始排除性能问题。使用不同的指标(磁盘负载)和工具(例如 sysstat 软件包中的 iostat)来分析系统性能。
还有第二个答案对你的问题:
计算CPU利用率使用
grep 'cpu ' /proc/stat | awk '{usage=100-($5*100)/($2+$3+$4+$5+$6+$7+$8)} END {print usage}'
我强烈建议使用监控系统(例如 Zabbix)
答案2
这3个数字是不是不同 CPU 的编号。
这些数字是平均值(看注释)最后 1 分钟、5 分钟和 15 分钟。
负载的含义如下:如果单 CPU 系统上有多个进程,它们看起来是并行运行的。但事实并非如此。实际发生的情况是:内核为进程提供 1/100 秒,然后通过中断中断其运行。然后将接下来的 1/100 秒交给另一个进程。有时这个1/100可以是1/1000甚至是不断变化的时间限制,这并不重要。
实际上,“哪个进程应该获得下一个 1/100 秒间隔?”这个问题将由复杂的启发式方法决定。它被称为任务调度。
当然,被阻塞的进程,例如正在等待从磁盘读取数据的进程,不受此任务调度的影响。
负载说明了什么:当前有多少进程正在等待下一个 1/100 秒时间范围。当然,这是一个平均值。这是因为您可以在 cat /proc/loadavg 中看到多个数字。
多CPU系统中的情况更为复杂。有多个cpu,其时间范围可以给多个进程。这使得任务调度变得有点复杂,但也不是太复杂。但情况是一样的。
内核是智能的,它尝试共享系统资源以获得最佳效率,并且它已经接近这个目标(有一些小的优化,例如,如果一个进程在同一台计算机上运行尽可能长的时间,那就更好了cpu 因为缓存考虑,但它们在那里并不重要)。这是因为如果我们有负载 8,这意味着:实际上有 8 个进程在等待下一个时间片。如果我们有8个CPU,我们可以将这些时间片一对一地分配给CPU,这样我们的系统就会得到最佳的利用。
如果你看到 a top
,你会发现实际运行的进程数量出奇的少:它们就是R
那里标记的进程。即使在不是真正的硬核系统上,它也通常低于 5。部分原因是等待来自磁盘或网络的数据的进程也被挂起(S
在顶部标记为)。负载仅显示CPU使用率。
多核 CPU 实际上是同一硅芯片上的多个 CPU。与此观点没有什么区别。
对于超线程 CPU,存在一个有趣的副作用:加载 CPU 会使其超线程对变慢。但这发生在正常任务调度处理的更深层次上,尽管它可以(并且应该)影响调度程序的进程移动决策。超线程 CPU 目前尚未得到广泛使用。
在 Windows 上,使用不同的方法进行负载计算:负载 1.0 表示全部的 cpu 核心使用率达到 100%(系统上的负载为 4.0)。
笔记正如@Alex 提到的,这不是时间平均值。它是时间常数为 1、5、15 分钟的指数加权时间平均值。它的计算更有效,并且对最近的变化反应更好。有关更多详细信息,请参阅来源kernel/sched/loadavg.c
。
答案3
我不知道为什么人们不直接回答这个问题。每个人都用计算机工程语言交谈。
实际上,这些数字是“1”中的负载平均值。如果您的平均负载为“5”,则意味着 CPU 使用率约为 500%,这意味着您的过载率为 400%。 (500% - 你的能力 100%)。如果它显示“0.05”,则意味着您仅使用 5% 的 CPU,95% 的 CPU 仍未使用。
以上计算针对 1 核。当您有多个核心时,平均值将除以核心数量/核心数量。例如,如果您有 4 个核心,并且平均值为“10”,则意味着您的 CPU 使用率为:10 / 4 * 100 = 250%
所以,平均值的理想值等于或小于您的“核心数”。 3个值(20.62、18.83、11.31)是最后1分钟、最后5分钟和最后15分钟的平均值。
答案4
在不深入了解“负载”的具体情况的情况下,简单地理解这一点的一种方法是,1 是 CPU 内核在给定时间实际可以处理的负载量。
如果平均负载高于 1,则意味着单个 CPU 核心无法完成更多工作,并且如果只有一个 CPU 核心可用,那么一台长期平均负载高于 1 的计算机将不得不“ “skip”在某些时间片期间将资源分配给某些任务,从而减慢其执行速度。
值得庆幸的是,现代计算机通常有多个 CPU 核心可用,这意味着平均负载为 1 - 这对于单核系统来说会很糟糕;代表固定的 CPU 存在过热或过早故障的危险 - 在四核系统上完全没问题,分布在所有四个核心上。
负载平均值在工作负载变化很大的台式机上相对无用,在工作负载稳定的服务器上,负载平均值可以指示 DoS 攻击、黑客攻击、硬件损坏、硬件升级紧迫性、行为不当的软件等。
像top或vmstat之类的东西更合适,大多数Linux发行版的软件包存储库中也有交互式工具,例如htop和glances,它们有助于实时隔离失控的资源使用情况。