用心打造
VPS知识分享网站

云服务器负载很高但CPU占用不高,应该怎么排查?

云服务器的 load average 已经很高,top 里 CPU 却还有大量空闲,这种情况看起来很矛盾。有些人会直接认定 CPU 性能差或服务器超售,但负载并不等于 CPU 使用率。

我排查网站卡顿时,经常遇到进程不是在计算,而是在等待磁盘、网络存储或内核资源。此时 CPU 可以很闲,任务却排着队,页面和 SSH 依然会明显变慢。

云服务器CPU占用不高但系统负载高示意图

今天就来讲清楚 Linux 负载和 CPU 使用率的区别,以及负载高、CPU不高时应该怎样定位。

一、先理解load average到底在统计什么

uptimetop 显示的三个数字,分别是过去 1、5、15 分钟的平均负载。Linux 负载不仅包含正在等待 CPU 的可运行任务,也包含处于不可中断睡眠状态的任务。

后者常显示为 D 状态,最常见的原因是等待磁盘 I/O。于是会出现 CPU idle 很高,但 load average 持续上升 的现象。

负载还要结合 CPU 核数看。4核机器负载短时达到4,不代表一定故障;1核机器长期负载4,说明队列压力已经明显。单看一个数字无法下结论。

二、第一步先看CPU时间花在哪里

打开 top 后观察 %Cpu(s),重点区分 ussywastus 高代表用户程序计算多,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状态多 磁盘或网络存储 iostatiotop
si/so持续变化 内存不足、频繁Swap free -hvmstat
st持续偏高 宿主机资源争抢 连续监控并联系服务商
负载高但很快回落 定时任务或短时突发 对照日志和任务时间

五、网络存储和文件系统也会拖高负载

NFS、对象存储挂载或失联的远程目录,可能让访问它的进程长时间停在 D 状态。此时本地磁盘指标不一定异常,需要结合 mount、系统日志和网络连通性检查。

文件系统错误、磁盘空间或 inode 耗尽,也会让应用写入异常。先看 dmesg -Tjournalctl -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。把 topvmstatiostat 和进程状态放在一起看,重点判断任务到底在等待什么。

对长期项目来说,持续监控比故障后猜原因更有效。至少记录负载、CPU、内存、磁盘延迟和可用空间,出现异常时才能快速对照。

赞(0)
未经允许不得转载;国外VPS测评网 » 云服务器负载很高但CPU占用不高,应该怎么排查?
分享到