如何识别VPS超售?CPU steal、磁盘IO测试教你避坑


VPS行业有个公开的秘密叫超售(Overselling)——服务商把一台物理机的资源卖出两倍甚至三倍的量,赌的就是用户不会同时用满。超售本身不是罪,合理范围内的超售是行业常态;但严重超售的VPS,晚高峰CPU steal飙到20%、磁盘IOPS从3万跌到300、SSH连上去都要卡三秒,这种机器买了就是浪费钱。

本文不聊虚的,直接给出一套可复现的检测命令和判断标准。新VPS到手,花30分钟跑完这些测试,超售与否一目了然。


一、超售的本质:服务商在赌什么?

超售类型        原理                              典型表现
------------------------------------------------------------------------------------------
CPU超售         物理机16核,卖出30台2核VPS          晚高峰CPU steal>10%,网站响应变慢
内存超售        物理机32G,开出50台1G VPS           Swap频繁使用,内存可用量<标称80%
磁盘超售        1块SSD被20个VPS共享                 IOPS暴跌,文件读写卡顿
带宽超售        1Gbps端口分给50台VPS各标100Mbps     晚高峰带宽<标称30%,丢包率飙升
IP超售          1个/24段塞满用户                    同IP段网站被连带封禁

超售的核心逻辑是"时间错配"——用户A白天忙、用户B晚上忙,理论上不会所有人同时满载。但当多个用户同时跑高负载(比如晚高峰大家都在做备份、编译、跑爬虫),物理资源就不够分了,你的VPS性能就会断崖式下跌。

合理超售 vs 严重超售:

指标                    合理超售                严重超售(建议退款)
------------------------------------------------------------------------------------------
CPU steal time          0-5%                   >10%持续20分钟以上
磁盘IOPS(NVMe)          >10000                 <5000或<1000
磁盘顺序写入            >300MB/s               <50MB/s
内存可用率              >标称值80%              <标称值50%
带宽实测/标称           >80%                   <30%(晚高峰)

二、CPU超售检测:steal time是照妖镜

  1. 什么是CPU Steal Time?

Steal Time(st)表示你的VPS想使用CPU,但CPU正被Hypervisor分配给其他虚拟机,导致你等待的时间占比。

类比
------------------------------------------------------------------------------------------
Steal Time = 你去餐厅吃饭,服务员把你的菜端给了隔壁桌,你干等着的时间比例。
st=0%      → 服务员只服务你,上菜飞快
st=5%      → 偶尔给隔壁桌加个菜,基本不影响
st=15%     → 服务员忙得团团转,你的菜半天不上
st=30%     → 建议换一家餐厅
  1. 如何查看Steal Time?
# 方法1:top命令(最常用)
top

# 看第三行,st列
%Cpu(s):  5.2 us,  2.1 sy,  0.0 ni, 90.5 id,  0.0 wa,  0.0 hi,  0.2 si,  2.0 st
#                                                                    ↑ 这就是steal time
# 方法2:iostat命令(更详细)
apt install sysstat -y    # 安装
iostat -c 1 10            # 每秒刷新,显示10次

# 看%steal列
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           3.50    0.00    1.20    0.00    15.30   80.00
#                                          ↑ steal time 15.3%
# 方法3:vmstat命令(持续监控)
vmstat 1 60

# 看最后一列 st
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 892156  23456 456789    0    0     0     0   12   45  5  2 90  0  3
#                                                                    ↑ st=3%
  1. Steal Time判断标准
steal time范围        含义                    建议动作
------------------------------------------------------------------------------------------
0-5%                  健康,物理机负载合理       正常使用,持续监控
5-10%                 轻微超售,偶尔有感知      观察晚高峰是否持续,考虑迁移
10-20%                明显超售,性能受影响      联系服务商迁移,或准备退款
>20%                  严重超售,基本不可用       立即退款换商家

关键技巧:不要只看一次瞬时值。Steal Time受瞬时负载影响,必须在多个时段多次测试,尤其是晚高峰(20:00-23:00)。

# 自动化监控脚本:每小时记录一次steal time
cat > /root/monitor_steal.sh << 'EOF'
#!/bin/bash
ST=$(top -bn1 | grep "Cpu(s)" | awk '{print $8}' | sed 's/st//')
echo "$(date '+%Y-%m-%d %H:%M:%S') steal_time=${ST}%" >> /var/log/steal_monitor.log
EOF
chmod +x /root/monitor_steal.sh

# 添加到crontab,每小时执行
crontab -l > /tmp/cron.tmp 2>/dev/null || true
echo "0 * * * * /root/monitor_steal.sh" >> /tmp/cron.tmp
crontab /tmp/cron.tmp
rm /tmp/cron.tmp

# 查看日志
tail -f /var/log/steal_monitor.log
  1. 区分"自身负载高"和"宿主机超售"
# 场景A:你的程序本身CPU占用高
# 表现:us(用户态)很高,st很低
%Cpu(s):  85.0 us,  5.0 sy,  0.0 ni,  5.0 id,  0.0 wa,  0.0 hi,  0.0 si,  5.0 st
#         ↑ 自身程序占85%                        ↑ steal仅5%

# 场景B:宿主机超售,你的VPS抢不到CPU
# 表现:us不高,但st很高
%Cpu(s):  10.0 us,  2.0 sy,  0.0 ni,  60.0 id,  0.0 wa,  0.0 hi,  0.0 si,  28.0 st
#         ↑ 自身程序只占10%                      ↑ steal高达28%

# 场景C:多台同类VPS同时st高 → 可能是自身业务问题
# 场景D:只有单台VPS st高 → 大概率是宿主机超售

三、磁盘IO超售检测:fio是唯一标准

dd命令测的是顺序写入,而真实业务(数据库、网站)几乎都是随机读写。识别磁盘超售,必须用fio测4K随机IOPS。

  1. dd命令(快速初筛,不准但方便)
# 顺序写入测试(创建1G文件)
dd if=/dev/zero of=/tmp/test_io bs=1M count=1024 oflag=direct

# 预期输出
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 2.345 s, 458 MB/s

# 判断标准
# >300MB/s  → SSD正常
# 100-300MB/s → 普通SSD,可能轻微超售
# <100MB/s  → 严重超售或HDD冒充SSD
# <50MB/s   → 建议退款

dd的局限:它测的是缓存写入(除非加oflag=direct),且是顺序IO。很多超售VPS的dd结果看起来正常,但随机IOPS已经烂透了。

  1. fio命令(精准检测,必跑)
# 安装fio
apt install fio -y    # Debian/Ubuntu
yum install fio -y    # CentOS/RHEL

# 4K随机读取IOPS测试(最贴近真实业务)
fio --name=randread --ioengine=libaio --iodepth=32 \
    --rw=randread --bs=4k --direct=1 --size=1G \
    --numjobs=4 --runtime=60 --group_reporting

# 4K随机写入IOPS测试
fio --name=randwrite --ioengine=libaio --iodepth=32 \
    --rw=randwrite --bs=4k --direct=1 --size=1G \
    --numjobs=4 --runtime=60 --group_reporting

# 混合读写测试(70%读30%写,模拟数据库)
fio --name=randrw --ioengine=libaio --iodepth=32 \
    --rw=randrw --rwmixread=70 --bs=4k --direct=1 --size=1G \
    --numjobs=4 --runtime=60 --group_reporting

fio结果解读:

指标                    NVMe SSD正常值        SATA SSD正常值        严重超售信号
------------------------------------------------------------------------------------------
4K随机读IOPS            >30000               >5000                <1000
4K随机写IOPS            >20000               >3000                <500
4K随机读延迟            <1ms                 <5ms                 >20ms
4K随机写延迟            <2ms                 <10ms                >50ms
顺序读速度              >1000MB/s            >400MB/s             <100MB/s
顺序写速度              >800MB/s             >300MB/s             <50MB/s

关键技巧:fio测试时同时开另一个SSH窗口跑top,观察iowait(wa)列。如果wa很高但fio的IOPS很低,说明磁盘队列被其他VPS挤占,是超售的铁证。

  1. ioping(测试磁盘响应延迟)
# 安装ioping
apt install ioping -y

# 测试磁盘响应延迟(100次请求)
ioping -c 100 /tmp

# 预期输出
--- /tmp (ext4 /dev/vda1) ioping statistics ---
100 requests completed in 99.0 ms, 900 iops, 3.51 MiB/s
min/avg/max/mdev = 47.2 us / 1.10 ms / 15.2 ms / 2.34 ms

# 判断标准
# avg < 1ms   → NVMe优秀
# avg 1-5ms   → SSD正常
# avg 5-20ms  → 轻微超售或普通SATA SSD
# avg > 20ms  → 严重超售或HDD

四、内存超售检测:Swap是警报器

  1. 查看内存和Swap使用情况
free -h

# 输出示例
              total        used        free      shared  buff/cache   available
Mem:           1.9G        892M        156M         12M        902M        876M
Swap:          1.0G        512M        488M
#              ↑ 注意Swap使用率

判断标准:

场景                    含义
------------------------------------------------------------------------------------------
Swap使用率为0           内存充足,物理内存未超售
Swap使用率<20%         偶尔有内存交换,基本正常
Swap使用率20-50%       内存紧张,可能存在轻微超售
Swap使用率>50%         物理内存严重不足,严重超售
Swap持续读写           即使空闲时Swap也在动,说明内存被其他VPS挤占
  1. 内存压力测试
# 安装stress
apt install stress -y

# 压力测试:分配2G内存,持续60秒
stress --vm 1 --vm-bytes 2G --vm-keep -t 60

# 同时观察另一个窗口的free -h和vmstat
# 如果测试期间Swap使用率暴涨,说明物理内存不足
  1. 检查内存是否被"气球"回收

某些虚拟化平台(如VMware、部分KVM配置)使用内存气球驱动(virtio-balloon),可以动态回收"未使用"的内存分配给其他VPS。

# 查看内存气球状态
dmesg | grep -i balloon
# 或
lsmod | grep balloon

# 如果看到virtio_balloon已加载,且free -h显示的内存波动很大
# 说明内存可能被动态回收,属于软性超售

五、带宽超售检测:晚高峰是照妖镜

  1. Speedtest测速
# 安装speedtest-cli
apt install speedtest-cli -y

# 测试
speedtest-cli

# 重点对比:白天 vs 晚高峰(20:00-23:00)
# 如果晚高峰速度<标称带宽的30%,说明带宽严重超售
  1. iperf3测速(更精准)
# 安装iperf3
apt install iperf3 -y

# 服务端(在另一台VPS或本地机器上运行)
iperf3 -s

# 客户端(在被测VPS上运行)
iperf3 -c 服务端IP -t 60

# 输出示例
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-60.00  sec   750 MBytes   105 Mbits/sec
  1. 实际下载测试
# 从知名测速节点下载大文件
wget -O /dev/null https://speed.hetzner.de/100MB.bin
wget -O /dev/null https://speedtest.tele2.net/100MB.zip

# 观察下载速度是否稳定
# 如果速度剧烈波动(如100Mbps→5Mbps→80Mbps→3Mbps),说明带宽被共享

带宽超售判断标准:

时段                    实测速度/标称带宽        评价
------------------------------------------------------------------------------------------
白天非高峰              >80%                    正常
晚高峰20:00-23:00       >60%                    轻微超售,可接受
晚高峰20:00-23:00       30-60%                  明显超售
晚高峰20:00-23:00       <30%                    严重超售,建议退款

六、一键检测脚本:30分钟出完整报告

手动跑命令太麻烦?用这些社区公认的脚本一键搞定。

  1. YABS(Yet Another Benchmark Script)
curl -sL yabs.sh | bash

# 测试内容:Geekbench 6 CPU跑分 + fio磁盘IO + iperf3全球网络测速
# 耗时:10-30分钟
# 结果可上传至VPSBenchmarks.com全球数据库对比

YABS结果解读:

指标                    入门级          普通            良好            优秀
------------------------------------------------------------------------------------------
Geekbench 6单核         <400            400-800         800-1200        >1200
磁盘顺序读(MB/s)        <200            200-500         500-1000        >1000
磁盘4K随机读IOPS        <1000           1000-5000       5000-20000      >20000
  1. 融合怪(ecs.sh)— 最全面的检测
curl -L https://gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.sh

# 测试内容:硬件信息 + CPU跑分 + 磁盘IO + 流媒体解锁 + 回程路由 + IP质量评分
# 耗时:15-45分钟
# 适合:重度评测用户,购机报告必备
  1. Bench.sh — 快速预览
wget -qO- bench.sh | bash

# 测试内容:系统信息 + 磁盘IO + 多地测速
# 耗时:1-3分钟
# 适合:快速确认机器基本可用性
  1. XY硬件体检 — 超售专项
bash <(curl -Ls https://Check.Place) -H

# 测试内容:CPU架构与跑分 + 内存容量 + 硬盘IO读写速度
# 耗时:2-5分钟
# 适合:购机后快速评估硬件底子
# 判断:硬盘连续写入速度若低于 50MB/s 需谨慎,低于 10MB/s 建议退款换机

七、超售综合判断流程图

新VPS到手
    │
    ▼
┌─────────────────┐
│ 第一步:CPU检测  │
│ top → 看st列    │
│ 白天测3次+晚高峰3次│
└────────┬────────┘
         │
    ┌────┴────┐
    ▼         ▼
 st<5%      st>10%
 正常        可疑
    │         │
    ▼         ▼
┌─────────┐  ┌─────────┐
│第二步:  │  │ 严重超售 │
│磁盘IO检测│  │ 建议退款 │
│ fio 4K  │  └─────────┘
│随机读写  │
└────┬────┘
     │
┌────┴────┐
▼         ▼
IOPS>1万  IOPS<1000
正常       严重超售
│          │
▼          ▼
┌─────────┐  ┌─────────┐
│第三步:  │  │ 严重超售 │
│内存检测  │  │ 建议退款 │
│ free -h │  └─────────┘
│ stress  │
└────┬────┘
     │
┌────┴────┐
▼         ▼
Swap<20%  Swap>50%
正常       严重超售
│          │
▼          ▼
┌─────────┐  ┌─────────┐
│第四步:  │  │ 严重超售 │
│带宽检测  │  │ 建议退款 │
│ speedtest│  └─────────┘
│ 晚高峰   │
└────┬────┘
     │
┌────┴────┐
▼         ▼
>60%      <30%
正常       严重超售
│          │
▼          ▼
┌─────────┐  ┌─────────┐
│ 机器合格 │  │ 严重超售 │
│ 正常使用 │  │ 建议退款 │
└─────────┘  └─────────┘

八、超售避坑终极建议

  1. 购买前识别信号
信号                          风险等级
------------------------------------------------------------------------------------------
价格低于行业均价50%以上        极高(如1核1G/年付$10)
"无限流量"但带宽<10Mbps        高(公平使用策略陷阱)
OpenVZ虚拟化                  高(极易超售)
商家成立<1年                  中高(无口碑积累)
无测试IP提供                  中(不敢让你测)
IP段内同机房VPS>30台          中(Censys查询)
  1. 购买后黄金72小时
时间节点        必做事项
------------------------------------------------------------------------------------------
Day 1           跑YABS/bench.sh,记录基准数据
Day 1-3         每小时记录一次steal time(用上面的脚本)
Day 2           晚高峰(20:00-23:00)跑全套测试
Day 3           对比白天和晚高峰数据,计算性能衰减率
Day 3           若衰减率>50%,立即申请退款
  1. 长期监控方案
# 安装NetData(实时可视化监控)
bash <(curl -Ss https://my-netdata.io/kickstart.sh)

# 安装后访问 http://你的VPS_IP:19999
# 可实时查看CPU、内存、磁盘、网络的详细指标
  1. 退款策略
商家类型                退款窗口        策略
------------------------------------------------------------------------------------------
主流大厂(DO/Vultr/Linode) 按小时计费    销毁重建,无损失
国内大厂(阿里云/腾讯云)    5-7天        工单申请,通常爽快退款
中小商家                 3-7天        尽快测试,超期难退
年付超低价商家            通常不退      购买前务必索要测试IP

总结

识别VPS超售不需要复杂工具,核心就三件事:

  1. 看steal time — 晚高峰持续>10%就是超售铁证
  2. 跑fio测4K IOPS — NVMe<1000或SSD<500就是磁盘超售
  3. 对比白天和晚高峰 — 性能衰减>50%说明资源被严重争抢

记住:在退款保证期内完成所有测试。大部分商家给3-7天退款窗口,错过就没了。花30分钟测试,换一台不卡的VPS,比花一个月忍受卡顿值当得多。


手机扫码阅读

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

WordPress vs Emlog vs Typecho:同配置VPS下谁更吃资源?

Linux防火墙配置全攻略:iptables、ufw、firewalld该用哪个?

评 论
更换验证码