VPS的Load Average很高,而监控里的CPU使用率并不高,通常不是指标“坏了”。Linux负载会统计正在运行、等待CPU以及处于不可中断等待的任务;大量进程卡在磁盘、网络存储或内核I/O时,即使CPU仍有空闲,负载也会持续上升。
先别急着重启:把同一时间点的证据留住
故障发生时先记录时间、业务症状和下面几组只读输出。重启可能暂时清空队列,却也会让D状态进程、内核日志和压力变化消失,后续很难判断是应用并发、存储延迟还是宿主机问题。
uptime
top
vmstat 1 5
ps -eo state,pid,ppid,comm,wchan:32 | awk '$1 ~ /^D/'
cat /proc/pressure/cpu
cat /proc/pressure/iouptime给出1、5、15分钟负载;top要同时看CPU的us、sy、id、wa和虚拟机常见的st;vmstat里的r表示可运行队列,b表示等待I/O的任务。单个瞬时值很容易误判,应对照多个采样点和机器平时基线。
Load Average高,可能是哪一种队列
| 现象组合 | 更可能的方向 | 下一步 |
|---|---|---|
| 负载高,CPU的us/sy也高,r持续偏大 | 可运行任务争抢CPU | 定位高CPU进程、线程数与cgroup配额 |
| 负载高,CPU空闲仍多,b和D状态任务增加 | 块设备或网络文件系统等待 | 检查iostat、内核日志、挂载与存储服务 |
| 负载高,wa明显,磁盘延迟同步升高 | I/O队列拥塞 | 区分读写突发、日志、数据库和备份任务 |
| CPU使用不高,但st持续出现 | 虚拟化宿主机争用 | 保留时段证据并与VPS服务方核对 |
| 容器内任务排队,整机CPU仍有余量 | cgroup CPU限额或节流 | 检查cpu.stat与容器资源限制 |
表格是定位方向,不是固定阈值。核心数、内核版本、存储类型和业务模型不同,“负载多少算高”没有统一答案;更可靠的判断是队列是否持续增长,以及它是否与响应变慢、超时或吞吐下降同时出现。
CPU队列和cgroup限额怎么分开看
如果vmstat的r持续较大,先用top或pidstat -u 1 5找出占用CPU的进程。若宿主机整体CPU仍空闲,但容器或服务响应变慢,应检查它是否受CPU配额限制:
cat /sys/fs/cgroup/cpu.stat
systemd-cgtop在使用统一cgroup层级的系统中,cpu.stat里的节流计数持续增加,说明任务有运行需求却被配额限制。此时简单增加应用线程可能让队列更长;应先确认容器或systemd单元的资源配置,再决定调额还是降低并发。
D状态任务为什么杀不掉
D状态表示任务正在不可中断等待,常见于块设备请求、故障磁盘、NFS/CIFS挂载或内核驱动路径。kill -9只能把信号挂起,通常不能让正在内核等待中的任务立即退出。应查看wchan、内核日志和对应挂载,而不是反复发送信号。
dmesg -T | tail -n 100
mount | grep -E 'nfs|cifs'
lsblk
如果日志出现I/O error、reset、timeout或文件系统报错,应先保护数据和停止新增写入,再按存储类型处理。不要在未备份、未确认文件系统状态时强制修复或强制重新挂载。
磁盘忙不忙,不能只看使用率
安装了sysstat后,可用下面的短时采样观察设备队列和延迟:
iostat -xz 1 5
pidstat -d 1 5重点对比读写吞吐、平均等待、队列长度和具体进程。某块盘的%util很高不必然等于故障,现代存储可以并行处理请求;反过来,吞吐量不大但等待时间突然上升,也可能已经影响交互业务。应与同一实例的平时数据比较,而不是套用一个通用毫秒阈值。
若高负载与日志压缩、备份、数据库检查点或镜像拉取同时发生,可先平滑降低这些任务的并发或错开时间窗口。若所有进程都受影响且内核日志出现设备异常,再把问题升级到文件系统、云盘或宿主机层面。
网络文件系统和宿主机争用也会抬高负载
NFS或CIFS服务端延迟时,本地进程可能大量进入D状态,CPU却保持空闲。检查挂载目标的连通性、服务端状态和超时日志,并确认业务是否把关键路径放在网络盘上。
在VPS中,top的st代表虚拟CPU等待宿主机调度的时间。若它在故障窗口持续出现,同时同机业务变慢,应保存监控截图、采样时间和实例信息给服务方。一次瞬时st不能证明宿主机长期超售。
按风险从低到高处理
- 保留
uptime、vmstat、D状态进程、PSI和内核日志。 - 停止或降低可确认的非关键批任务并发,观察队列是否回落。
- 对照具体进程检查磁盘、网络挂载、数据库和容器资源限制。
- 出现设备或文件系统错误时先保护数据,再进入维护窗口处理。
- 证据指向云盘延迟或CPU steal时,携带同一时间窗数据联系服务方。
恢复后至少对照一个相同业务时段,确认负载、响应时间、I/O压力和错误日志同时回到基线。只看到Load Average下降,并不能证明根因已经消失。
结论
VPS负载高但CPU不忙,优先寻找“谁在排队”:r指向CPU运行队列,b和D状态指向不可中断等待,wa和I/O PSI帮助确认存储压力,st提示虚拟化争用,cgroup节流则解释局部服务为何排队。按这条证据链处理,比直接重启或盲目升级CPU更容易找到真正瓶颈。






