您登录到一台慢速服务器,运行 uptime 或 top,并在“load average”旁边看到三个数字。它们看起来是对机器繁忙程度的裁决,但在拥有两个核心的笔记本电脑和拥有三十二个核心的服务器上,2.5 的值意味着完全不同的事情。孤立地阅读这些数字几乎没有任何意义。

本指南解释了负载平均值实际上测量的是什么,为什么有三个值,以及如何判断给定值是健康的还是故障的迹象。

负载平均值测量的内容

负载平均值是在一段时间内测量正在使用 CPU 或等待运行的进程的平均数量。在 Linux 上,它还计算处于不可中断睡眠状态的进程,这通常意味着它们正在等待磁盘或其他 I/O。这个最后细节使 Linux 与其他一些系统区分开来,也是服务器可以显示高负载而 CPU 看起来大部分空闲的原因。

简而言之,负载平均值回答的是“当前有多少任务在争夺资源?”而不是“CPU 的使用百分比是多少?”一个卡在慢速磁盘上等待的进程仍然计入负载,即使它没有消耗任何 CPU 周期。

三个数字

负载平均值以三个值报告。运行 uptime 会在行末显示它们:

终端

uptime

输出

 14:32:51 up 7 days,  3:14,  2 users,  load average: 0.52, 0.74, 0.91

这三个数字是过去 1、5 和 15 分钟的指数加权移动平均值:

  • 0.52 - 过去一分钟的平均值。
  • 0.74 - 过去五分钟的平均值。
  • 0.91 - 过去十五分钟的平均值。

一起阅读它们告诉您趋势,这比任何单个值都重要。当 1 分钟数字高于 15 分钟数字时,负载正在上升,系统变得更繁忙。当 1 分钟数字较低时,峰值已经过去,系统正在平静下来。在上面的输出中,负载正在逐渐下降。

负载平均值与 CPU 核心的关系

除非将其与逻辑 CPU 核心数量进行比较,否则负载平均值毫无意义,因为每个逻辑核心一次只能运行一个任务。1.0 的负载意味着正好有足够的 workload 来让一个核心全速运转。在单核机器上这是满容量,但在四核机器上还有三个核心处于空闲状态。

经验法则是将负载平均值除以核心数:

  • 负载等于核心数意味着系统完全使用且没有等待。
  • 负载低于核心数意味着有剩余容量。
  • 负载高于核心数意味着进程正在排队并等待轮次。

使用 nproc 检查系统有多少逻辑 CPU 核心:

终端

nproc

输出

4

在这台四核机器上,0.91 的负载平均值是舒适的,因为它远低于 4。在单核虚拟机上的相同 0.91 意味着 CPU 几乎饱和。要了解处理器指标的更广泛视图,请参阅检查 Linux 中 CPU 使用率的指南。

查看负载平均值的位置

几种工具报告负载平均值,您选择哪一个取决于您想要多少细节。

最快的视图是 uptime,它在一行上打印三个值。top 命令在其标题中显示相同的数字并实时刷新它们,同时显示每个进程的 CPU 使用率。htop 命令也显示它们,具有更友好的界面和彩色仪表。w 命令在已登录用户列表上方打印负载平均值。

对于脚本,直接从内核读取原始值:

终端

cat /proc/loadavg

输出

0.52 0.74 0.91 1/523 18204

前三个字段是熟悉的 1、5 和 15 分钟平均值。第四个字段 1/523 显示当前可运行的调度实体数量与总调度实体数量的比率,最后一个字段是最近创建的进程的 PID。由于格式是固定的,/proc/loadavg 方便在监控脚本中解析。

负载平均值与 CPU 使用率

将负载平均值和 CPU 使用率视为同一件事很诱人,但它们回答的是不同的问题。CPU 使用率是处理器当前花费在执行工作上的时间百分比。负载平均值是在一段时间内平滑的任务争夺 CPU 和其他资源的数量。

它们之间的差距在 I/O 中清晰可见。如果进程被阻塞并等待慢速磁盘,它会计入负载平均值但几乎不使用 CPU。您可能会在四核机器上得到 8 的负载,而 top 报告 CPU 为 90% 空闲。在这种情况下瓶颈不是处理器,而是磁盘,修复方法是调查 I/O 而不是 CPU。要找出哪个资源是真正的限制因素,将负载读数与 top、vmstat 或 iostat 等工具结合使用。

快速参考

读数含义
1-minute load短期压力。对峰值反应迅速。
5-minute load中期压力。平滑短暂变化。
15-minute load更长的趋势。最适合持续负载。
load < cores系统通常有剩余容量。
load = cores系统完全使用,等待很少。
load > cores任务可能正在排队等待 CPU 时间或 I/O。

常见问题解答

什么是好的负载平均值?
低于逻辑 CPU 核心数的负载平均值意味着系统有剩余容量。持续高于核心数的负载意味着进程在等待。没有单一的“好”数字,因为它完全取决于机器有多少核心。

负载平均值为 1.0 是坏的吗?
在单核系统上,1.0 意味着 CPU 完全使用且没有余量。在多核系统上,1.0 很轻,因为其他核心处于空闲状态。始终将值除以 nproc 的核心数。

为什么 CPU 空闲时负载很高?
Linux 计算不可中断睡眠中的进程,通常是等待磁盘或其他 I/O 的进程,计入负载平均值。高负载与空闲 CPU 指向 I/O 瓶颈而不是处理器瓶颈。

我应该关注三个数字中的哪一个?
比较它们。如果 1 分钟值高于 15 分钟值,负载正在上升。如果较低,峰值正在通过。15 分钟数字是持续趋势的最佳指标。