如何查看 CPU 负载?(top, uptime)Load Average 的三个数字代表什么?
查看 CPU 负载(Load Average)是服务器运维和性能排查中最基础的技能。以下是详细的查看方法以及对 Load Average 三个数字的深度解读。
一、 如何查看 CPU 负载?
你提到的 top 和 uptime 是最常用的两个命令,此外还有一些增强工具。
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/Owa等)。注意:CPU 使用率高不一定 Load 高,Load 高也不一定 CPU 使用率高(详见下文)。
3. 其他推荐工具
htop:top的增强版,有颜色、图形化柱状图,体验更好。w:除了显示负载,还能显示当前登录用户在做什么。cat /proc/loadavg:直接读取内核文件查看原始数据。
二、 Load Average 的三个数字代表什么?
在 load average: 0.05, 0.12, 0.09 中,这三个数字分别代表:
- 第 1 个数字:过去 1 分钟 的平均负载。
- 第 2 个数字:过去 5 分钟 的平均负载。
- 第 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 的逻辑核心数。
你可以使用 lscpu 或 grep -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。
总结
- 使用
uptime或top查看。 - 三个数字代表 1、5、15 分钟的平均活跃进程数。
- 核心公式:
Load Average除以CPU 核心数。如果结果大于 1,说明系统过载。 - 警惕:Load 高不一定是 CPU 忙,也可能是磁盘 I/O 慢(关注
%wa)。
右滑查看面试常问