基于本文回答

播面 播面

文解图解播客视频,多维讲透八股文

如何查看 CPU 负载?(top, uptime)Load Average 的三个数字代表什么?

知识点图片

查看 CPU 负载(Load Average)是服务器运维和性能排查中最基础的技能。以下是详细的查看方法以及对 Load Average 三个数字的深度解读。


一、 如何查看 CPU 负载?

你提到的 topuptime 是最常用的两个命令,此外还有一些增强工具。

1. 使用 uptime 命令(最简单、最纯粹)

这是查看系统负载最快的方式。

bash
$ uptime
 14:23:05 up 10 days,  4:12,  2 users,  load average: 0.05, 0.12, 0.09
  • 输出解读:
    • 14:23:05:当前系统时间。
    • up 10 days:系统已运行时间。
    • load average: 0.05, 0.12, 0.09:这就是我们要找的负载数据。

2. 使用 top 命令(实时、详细)

top 不仅能看总负载,还能看到具体是哪个进程在占用 CPU。

bash
$ top
top - 14:25:01 up 10 days,  4:14,  2 users,  load average: 0.15, 0.10, 0.08
Tasks: 120 total,   1 running, 119 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.2 us,  0.5 sy,  0.0 ni, 98.2 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
...
  • 第一行:内容与 uptime 完全一致,包含 Load Average。
  • 第三行 (%Cpu):显示 CPU 的具体使用率(用户态 us、内核态 sy、空闲 id、等待 I/O wa 等)。注意:CPU 使用率高不一定 Load 高,Load 高也不一定 CPU 使用率高(详见下文)。

3. 其他推荐工具

  • htoptop 的增强版,有颜色、图形化柱状图,体验更好。
  • w:除了显示负载,还能显示当前登录用户在做什么。
  • cat /proc/loadavg:直接读取内核文件查看原始数据。

二、 Load Average 的三个数字代表什么?

load average: 0.05, 0.12, 0.09 中,这三个数字分别代表:

  1. 第 1 个数字:过去 1 分钟 的平均负载。
  2. 第 2 个数字:过去 5 分钟 的平均负载。
  3. 第 3 个数字:过去 15 分钟 的平均负载。

1. 这三个数字的趋势含义

通过对比这三个数字,你可以判断负载的变化趋势:

  • 1分钟 > 15分钟(例如 2.5, 1.5, 0.8):负载正在升高。系统近期变忙了,需要注意。
  • 1分钟 < 15分钟(例如 0.8, 1.5, 2.5):负载正在降低。系统之前很忙,现在已经空闲下来了。
  • 三个数字基本持平:系统负载比较稳定

2. 什么是“Load”(负载)?

这是一个非常关键的概念。Load Average 不等于 CPU 使用率(%)

在 Linux 系统中,Load Average 指的是处于“可运行状态”和“不可中断状态”的平均进程数

  • 可运行状态 (Running/Runnable):正在使用 CPU 或者正在排队等待 CPU 的进程。
  • 不可中断状态 (Uninterruptible Sleep):通常是在等待硬件资源(主要是 磁盘 I/O)的进程。

形象的比喻:过桥
想象 CPU 是一座桥,进程是车。

  • Load = 0:桥上没车。
  • Load = 0.5:桥上有一半的空间有车。
  • Load = 1.0:桥上刚好占满了车,但车流还在顺畅移动。
  • Load > 1.0:桥满了,而且桥头还有车在排队(这就叫拥堵/过载)。

3. 多少 Load 算高?(必须结合 CPU 核心数)

单纯看数字没有意义,必须除以 CPU 的逻辑核心数

你可以使用 lscpugrep -c 'model name' /proc/cpuinfo 查看核心数。

  • 单核 CPU (1 Core)

    • Load < 0.7:系统很健康。
    • Load = 1.0:CPU 刚好满负荷,没有空闲,但也没有排队。
    • Load > 1.0:进程开始排队,系统变慢。
    • Load > 5.0:系统严重堵塞,可能假死。
  • 多核 CPU (例如 4 Cores)

    • Load = 1.0:意味着只用满了 1 个核,或者 4 个核每个只用了 25%。系统非常轻松。
    • Load = 4.0:4 个核刚好全部满负荷。
    • Load > 4.0:开始过载。

通用经验法则:
如果 Load Average / CPU 核心数 > 0.7,就应该开始关注了。
如果 Load Average / CPU 核心数 > 1.0,需要着手解决问题。


三、 进阶:CPU 没跑满,为什么 Load 很高?

这是面试或排查中常见的问题。因为 Linux 的 Load 包含了 等待 I/O 的进程。

  • 场景 A:CPU 密集型

    • 大量进行数学计算、视频压缩。
    • 表现:top%us (用户态) 很高,Load 也很高。
    • 解决:优化代码,增加 CPU。
  • 场景 B:I/O 密集型

    • 大量读写磁盘、数据库查询慢、磁盘故障。
    • 表现:top%us 很低(CPU 其实很闲),但 %wa (iowait) 很高,Load 飙升。
    • 原因:大量进程卡在等待磁盘响应(D 状态),被算入了 Load。
    • 解决:检查磁盘性能,优化数据库 SQL。

总结

  1. 使用 uptimetop 查看。
  2. 三个数字代表 1、5、15 分钟的平均活跃进程数。
  3. 核心公式Load Average 除以 CPU 核心数。如果结果大于 1,说明系统过载。
  4. 警惕:Load 高不一定是 CPU 忙,也可能是磁盘 I/O 慢(关注 %wa)。