基于本文回答

播面 播面

文图音视,全方位拆解八股文
0
评论

如何查看 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)。
00:00
00:00