网站突然卡顿、SSH 连上就卡、执行命令半天没反应——八成是服务器负载(load)爆了。很多人一看到 load average: 5.00, 4.50, 4.00 就慌,不知道负载到底什么意思、多高算高、怎么定位是哪个进程在搞事。这篇文章把负载的原理、查看方法、排查步骤讲清楚,让你三分钟内找到占用资源的元凶。
一、load average 是什么
load average(平均负载)表示单位时间内系统里处于可运行和不可中断状态的进程平均数,一般显示 1、5、15 分钟三个值:
load average: 2.50, 2.00, 1.50
怎么判断高不高?看 CPU 核数:
- 单核 CPU,load 长期 > 1 就说明满载了
- 四核 CPU,load 4 左右 = 满载,> 4 就是过载
关键对比:15 分钟值 > 5 分钟值 > 1 分钟值 = 负载在持续上升(趋势更值得关注);反过来说明在恢复。
二、怎么查看负载
uptime(最直接):
uptime
输出第一行就是 load average。
top(动态实时):
top
第一行同样有 load,还能实时看 CPU、内存和进程排序。
核数确认(判断基准):
nproc
拿 load 除以核数,比值 > 1 表示满载。
三、top 怎么看
top 打开后的关键信息:
top - 10:20:31 up 5 days, 2:10, 1 user, load average: 3.80, 2.50, 1.90
Tasks: 180 total, 1 running, 179 sleeping
%Cpu(s): 90.0 us, 8.0 sy, 2.0 id, 0.0 wa, 0.0 hi, 0.0 si
MiB Mem : 1986.1 total, 100.5 free, 1200.0 used
MiB Swap: 2048.0 total, 1990.0 free
us用户态 CPU、sy系统态、id空闲、waI/O 等待- 进程列表按 CPU 排序(按 M 键切内存排序、P 键回 CPU 排序)
- 看
%CPU列,最高的基本就是元凶
重点看 wa(iowait):如果 wa 很高但 us/sy 不高,说明瓶颈在磁盘而不是 CPU。
四、三步定位元凶
第 1 步:找最占 CPU 的进程
top -c -bn1 | head -20
-c 显示完整命令行,-b -n1 输出一次就退出,适合非交互排查。看 %CPU 最高的进程名。
第 2 步:确认进程身份
ps -fp PID
看到 PID 后用这个命令确认是什么程序、谁启动的、跑了多久。
第 3 步:针对性处理
- PHP-FPM 占用高 → 参考本站 PHP 性能优化教程调参
- mysqld 占用高 → 参考本站 MySQL 慢查询优化教程
- 挖矿进程(xmrig、kswapd0 异常)→ 参考本站挖矿病毒查杀教程
- 未知新进程 → 先
kill -9 PID再查定时任务
五、CPU 高和 I/O 高是两码事
判断到底卡在哪:
top -bn1 | head -12
us + sy高 → 计算密集,看哪个进程烧 CPUwa(iowait)高 → 磁盘慢,用iostat、iotop看磁盘(参考本站磁盘 IO 慢排查教程)si/so高 → 在频繁换入换出 swap,内存不够,参考本站 Linux swap 教程- 内存快满 →
free -h,不够就加内存或调服务
六、常见高负载原因对照
| 现象 | 常见原因 | 处理方向 |
|---|---|---|
| CPU 100% 且常驻 | 程序死循环/被攻击/挖矿 | top 定位进程 |
| wa 居高不下 | 磁盘 IO 慢、数据库频繁读盘 | 换 SSD/优化 SQL/加缓存 |
| 内存吃满+swap 狂转 | 内存不足 | 加内存/调 PHP-FPM |
| 短时间暴涨又回落 | 突发流量/爬虫/CC 攻击 | 限流、参考 Nginx 限流教程 |
| 连接数爆炸 | 被刷/异常外连 | ss 看连接,防火墙封 IP |
七、常见问题
Q1:load 高就一定是坏事吗?
多核机器短暂 load > 核数不一定是问题,关键看趋势和是否持续。稳定运行的应用在跑批任务时负载高很正常。
Q2:CPU 空闲但 load 高?
这是经典的 I/O 等待现象:进程都在等磁盘,CPU 闲着但任务排队。重点看 wa,用 iostat -x 1 看磁盘使用率。
Q3:怎么让负载快速降下来?
先定位再处理:临时 kill 掉异常进程最立竿见影;长期要优化服务配置、加资源或做限流。别一上来就重启服务器,重启只是把问题延迟。
Q4:怎么留证据给服务商工单?
保存 top -bn1 | head -20、uptime、free -h、df -h 输出,附时间点,方便和主机商沟通是否被邻居影响(超卖)。
Q5:SSH 卡得敲不了命令?
用 top -bn1 一次性输出替代交互式 top;或直接 uptime + ps aux --sort=-%cpu | head,都是非交互命令。
八、长期监控
负载排查不能只看一次。建议:
- 用
watch -n 2 top观察几分钟趋势 - 配置监控告警(参考本站 Zabbix 监控教程)
- 给定时任务错峰,避免同一时间跑批量脚本
总结
负载排查核心一句话:看 load 趋势 → top 看 us/sy/wa → 锁定 %CPU 最高进程 → 针对处理。分清 CPU 高、I/O 高、内存不足三种情况再动手,别盲目重启。配合本站的 PHP 优化、MySQL 慢查询、swap、Nginx 限流等教程,能覆盖绝大多数高负载场景。
