
你输入uptime,看到load average: 2.5, 3.0, 2.8。这是好还是坏?有人告诉你“负载超过1就是有问题”,你慌了。你的服务器负载常年2.5,但跑得好好的。
你被误导了。负载数字本身没意义,要和CPU核心数对比才有意义。
先看一个数据
在一项针对运维人员的调查中,超过60%的人曾错误判断服务器负载状况。有人把4核服务器的负载2.5当作“正常”,有人把1核服务器的负载1.2当作“没问题”。
负载不是绝对数字。4核服务器负载8才到警戒线,1核服务器负载1.5就超了。不看核心数,负载就是废数字。
负载是什么
Load Average是单位时间内,处于运行状态和可运行状态(等待CPU)以及不可中断睡眠状态(等待I/O)的平均进程数。
简单说:正在用CPU的进程 + 排队等CPU的进程 + 正在等磁盘/网络的进程。
三个数字分别是1分钟、5分钟、15分钟的平均值。
- 负载 = 1:刚好有1个进程一直在用CPU,或者多个进程交替但平均占用100%
- 负载 > CPU核心数:有进程在排队等CPU
- 负载 < CPU核心数:CPU有闲置
反常识点:负载高不一定因为CPU不够。I/O等待(磁盘慢、网络卡)也会让负载飙升,但CPU使用率可能很低。
负载和CPU核心数的关系
判断标准:负载应该以CPU核心数为参照。
| CPU核心数 | 负载 < 核心数 | 负载 ≈ 核心数 | 负载 > 核心数 |
|---|---|---|---|
| 1核 | 正常 | 满载 | 过载 |
| 4核 | 正常(<4) | 满载(≈4) | 过载(>4) |
| 8核 | 正常(<8) | 满载(≈8) | 过载(>8) |
4核服务器,负载2.5是正常的,甚至偏低。8核服务器,负载6也是正常的。1核服务器,负载1.5就超了。
查看核心数:
bash
nproc # 或 grep "model name" /proc/cpuinfo | wc -l
所以,负载需要和核心数一起看。只看绝对值,没有任何意义。
负载高但CPU低?看I/O
最迷惑的情况:负载高,但top里CPU使用率很低。
bash
top # 看%wa列
%wa(I/O等待)高,说明进程在等磁盘读写。硬盘慢,进程排队,负载上去,但CPU闲着。典型场景:
- 机械硬盘随机读写慢
- 数据库没加索引,大量全表扫描
- 日志刷得太频繁
- 内存不足,频繁swap换入换出
解决方案:换SSD、加索引、加内存。不是换CPU。
三个数字怎么看
load average: 2.5, 3.0, 2.8:
- 1分钟:2.5,最近1分钟的负载
- 5分钟:3.0,趋势是上升还是下降
- 15分钟:2.8,长期基线
趋势判断:
- 1分钟 > 5分钟:负载在上升,刚来了一波流量
- 1分钟 < 5分钟:负载在下降,高峰期过了
- 三个数字相近:负载稳定
- 15分钟已经高:持续过载,需要处理
各场景的“正常”负载
| 场景 | 合理负载(4核) | 说明 |
|---|---|---|
| Web服务器 | <4 | 大部分请求短,负载低 |
| 数据库服务器 | 2-6 | 查询密集型,可容忍稍高 |
| 离线计算 | 可到6-8 | 批处理,高负载可接受 |
| 开发测试机 | <2 | 闲时多 |
| 实时交易系统 | <2 | 延迟敏感,需留余量 |
不是所有服务都必须负载<1。离线任务可以用满资源。
实战案例
案例一:负载2.5,CPU 20%
4核服务器,负载2.5,不高。但CPU才20%。为什么负载不低但CPU不高?查iostat -x 1,看到%util接近100%,磁盘在忙。原因是日志写得太多。优化日志输出后,负载降到0.5。
案例二:负载8,CPU 90%
4核服务器,负载8(超了1倍),CPU 90%。确实是CPU不够。升级到8核后,负载降到3,恢复正常。
案例三:负载稳定6,业务正常
8核服务器,负载6(低于8)。业务没投诉。不需要处理。负载不是越低越好,够用就行。
监控告警怎么设
根据CPU核心数来设:
- warning:负载 > 核心数 × 0.7,持续10分钟
- critical:负载 > 核心数 × 1.2,持续5分钟
4核服务器:warning 2.8,critical 4.8
8核服务器:warning 5.6,critical 9.6
同时监控CPU使用率和I/O等待,避免误判。
常见误区
误区一:负载不能超过1
错。4核服务器负载4才满载。不谈核心数只谈负载,是耍流氓。
误区二:负载高一定是CPU不够
错。I/O等待(磁盘慢、网络卡)也会让负载高,但CPU闲着。先看%wa再下结论。
误区三:负载越低越好
错。负载太低说明资源浪费。合适的负载是够用有余量,不是越低越好。
最后一句
负载本身不是问题。问题是负载和CPU核心数不匹配。
下次看到load average,先确认CPU核心数。4核服务器负载2.5?正常。1核服务器负载2.5?出事了。
把这条规则记住:负载不看绝对数字,要看和核心数的比值。没这个参照系,负载数字就是噪音。参照系对了,你才不会误判。




