Linux 服务器负载过高排查教程:load average、top、uptime 全看懂,找到 CPU 占用元凶


网站突然卡顿、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 空闲、wa I/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 高 → 计算密集,看哪个进程烧 CPU
  • wa(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 限流等教程,能覆盖绝大多数高负载场景。


手机扫码阅读

微信或手机浏览器扫一扫,随时随地随心阅读与分享

DNS 域名解析配置详解:A记录、CNAME、MX、NS 全搞懂,域名解析不再求人

MySQL 忘记 root 密码怎么办:免密进入、重置密码全流程,秒级找回

评 论
更换验证码