云服务器的 load average 已经很高,top 里 CPU 却还有大量空闲,这种情况看起来很矛盾。有些人会直接认定 CPU 性能差或服务器超售,但负载并不等于 CPU 使用率。
我排查网站卡顿时,经常遇到进程不是在计算,而是在等待磁盘、网络存储或内核资源。此时 CPU 可以很闲,任务却排着队,页面和 SSH 依然会明显变慢。

今天就来讲清楚 Linux 负载和 CPU 使用率的区别,以及负载高、CPU不高时应该怎样定位。
一、先理解load average到底在统计什么
uptime 或 top 显示的三个数字,分别是过去 1、5、15 分钟的平均负载。Linux 负载不仅包含正在等待 CPU 的可运行任务,也包含处于不可中断睡眠状态的任务。
后者常显示为 D 状态,最常见的原因是等待磁盘 I/O。于是会出现 CPU idle 很高,但 load average 持续上升 的现象。
负载还要结合 CPU 核数看。4核机器负载短时达到4,不代表一定故障;1核机器长期负载4,说明队列压力已经明显。单看一个数字无法下结论。
二、第一步先看CPU时间花在哪里
打开 top 后观察 %Cpu(s),重点区分 us、sy、wa 和 st。us 高代表用户程序计算多,sy 高代表内核工作多,wa 高说明 CPU 在等待 I/O,st 高则与虚拟化环境中被宿主机占用的时间有关。
这篇讨论的是 CPU 总占用不高的情况。若 wa 明显升高,应优先查磁盘和存储;若 st 持续升高,则更接近宿主机资源争抢。两种问题不能用同一套优化方法。
最好连续观察几分钟,不要只截取一秒钟的数据。故障可能是定时备份、日志压缩或数据库任务造成的周期性尖峰。
三、找出正在等待的进程
可用 ps -eo state,pid,ppid,comm,wchan:32 --sort=state 查看进程状态,重点关注状态为 D 的任务。wchan 能提供进程正在内核中等待什么的线索。
也可以运行 vmstat 1 10,观察运行队列 r、不可中断任务 b、I/O等待 wa 以及交换读写 si/so。多个指标一起异常,比单独看负载更可靠。
常见来源包括数据库随机读写、磁盘已满、备份压缩、网络挂载失联、容器存储层卡顿,以及内存不足后频繁换页。
四、磁盘I/O是不是瓶颈
安装 sysstat 后可执行 iostat -xz 1 10。重点看设备延迟、队列和利用率,但不要机械套用某个固定阈值,云盘、SSD和机械盘的表现差异很大。
接着用 iotop -oPa 找出持续读写的进程。数据库、备份和日志进程同时争用一块系统盘时,即使 CPU 很空,业务响应也可能很慢。
| 现象 | 更可能的方向 | 下一步 |
|---|---|---|
wa高、D状态多 |
磁盘或网络存储 | iostat、iotop |
si/so持续变化 |
内存不足、频繁Swap | free -h、vmstat |
st持续偏高 |
宿主机资源争抢 | 连续监控并联系服务商 |
| 负载高但很快回落 | 定时任务或短时突发 | 对照日志和任务时间 |
五、网络存储和文件系统也会拖高负载
NFS、对象存储挂载或失联的远程目录,可能让访问它的进程长时间停在 D 状态。此时本地磁盘指标不一定异常,需要结合 mount、系统日志和网络连通性检查。
文件系统错误、磁盘空间或 inode 耗尽,也会让应用写入异常。先看 dmesg -T 或 journalctl -k 中有没有 I/O error、reset、timeout 等记录,不要在仍有大量写入时贸然运行文件系统修复。
六、怎样处理才不会把问题越改越乱
先停止或限速明确的异常任务,例如失控备份、批量压缩或日志写入。数据库负载高时,应先确认慢查询和存储延迟,不要为了让 load 数字下降直接重启数据库。
内存不足引发换页,应减少不必要服务、调整应用上限或升级内存。磁盘性能长期不够,则需要分离数据库与日志、升级存储或重新安排高 I/O 任务时间。
选购新服务器时不要只对比 CPU 核数,磁盘类型、I/O稳定性、内存余量和宿主机质量同样重要。预算有限时可先用短周期小配置验证,像 萤光云 和 LightNode 这类支持多节点或灵活计费的平台,更方便先测线路和实际负载再调整。
七、我更建议记录一段时间再判断
一张 top 截图只能说明某个瞬间。更有价值的是记录故障时间、负载、CPU各项比例、内存、磁盘延迟和当时运行的任务,再和网站慢日志或数据库日志对照。
负载高不是故障原因,而是任务正在排队的结果。 找到它们在等 CPU、磁盘、内存还是网络,才算真正开始排查。
常见问题
问:1核VPS负载超过1就一定卡吗?
答:不一定,短时超过1很常见,长期高于核数并伴随响应变慢才需要重点排查。
问:CPU idle很高为什么网站仍然慢?
答:进程可能在等待磁盘、网络存储、锁或其他内核资源。
问:iowait高就是硬盘坏了吗?
答:不一定,也可能是读写量过大、云盘限速、内存换页或远程存储延迟。
问:重启服务器能解决高负载吗?
答:可能暂时恢复,但会丢失故障现场,未解决根因还会再次出现。
问:load average看哪个时间值更有用?
答:三个都要看,1分钟反映当前变化,5和15分钟更适合判断问题是否持续。
温馨提示
看到高负载先不要急着升级 CPU。把 top、vmstat、iostat 和进程状态放在一起看,重点判断任务到底在等待什么。
对长期项目来说,持续监控比故障后猜原因更有效。至少记录负载、CPU、内存、磁盘延迟和可用空间,出现异常时才能快速对照。


