为什么你需要对 VPS 做性能基准测试?
很多站长买 VPS 就像买盲盒——只看参数就下单,到手后直接跑业务,从来没想过验证一下这台机器到底配不配得上它的价格。实际上,VPS 服务商普遍存在超售(over-provisioning)现象,同一台母机上塞的邻居数量、CPU 型号、磁盘类型、网络带宽质量,都会直接影响你的实际体验。
所谓”性能基准测试”,就是通过一系列标准化的测试工具,对 VPS 的 CPU、内存、磁盘 I/O、网络吞吐量进行定量测量,然后把结果和同价位的其他机器做横向对比。这样你就能一眼看穿:这家服务商是不是在坑你。
本文会手把手教你搭建一套完整的 VPS 性能检测体系,包含所有命令、脚本和解读方法。无论你手里是一台 512MB 的”传家宝”,还是 32 核的独服,这套方法都适用。
测试前的准备工作
安装必备工具
以下命令基于 Debian/Ubuntu 系统,CentOS/RHEL 请把 apt 换成 yum/dnf:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 # 基础工具
apt update && apt install -y curl wget git htop iotop sysstat
# 基准测试全家桶
apt install -y sysbench fio iperf3 mtr-tiny dnsutils
# 网络测速
curl -sSL https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py -o /usr/local/bin/speedtest-cli
chmod +x /usr/local/bin/speedtest-cli
# 磁盘信息查看
apt install -y smartmontools lshw
# 内存压力测试
apt install -y memtester
测试前的环境检查
在跑任何测试之前,先确认当前环境状态:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 # 查看系统负载——别在高峰期跑测试
uptime
# 查看 CPU 型号和核心数
lscpu | grep -E "Model name|CPU\(s\)|Thread|Core|Socket"
# 查看内存和 Swap
free -h
# 查看磁盘类型(SSD/HDD)
lsblk -d -o name,rota,size,model
# rota=1 表示 HDD,rota=0 表示 SSD
# 查看磁盘挂载信息
df -h
一个重要的原则:测试时要尽量减少其他进程的干扰。如果你在跑数据库或者 Web 服务,建议先停掉,或者在凌晨低峰期测试。
CPU 性能测试
使用 sysbench 做 CPU 基准测试
sysbench 是 Linux 上最经典的基准测试工具之一,支持 CPU、内存、文件 I/O、数据库等多种测试模式。CPU 测试的核心是计算素数:
1
2
3
4
5
6
7
8 # CPU 单线程测试(计算素数,最大 20000)
sysbench cpu --cpu-max-prime=20000 run
# CPU 多线程测试(使用所有核心)
sysbench cpu --cpu-max-prime=20000 --threads=$(nproc) run
# 只看关键数据
sysbench cpu --cpu-max-prime=20000 --threads=$(nproc) run 2>&1 | grep -E "events per second|total time"
输出解读:
| 指标 | 含义 | 参考值(4核 VPS) |
|---|---|---|
| events per second | 每秒完成的计算次数,越高越好 | 500+ 为优秀,300+ 为合格 |
| total time | 完成固定计算量所需时间,越短越好 | 10 秒以内为优秀 |
| threads fairness | 各线程完成量的差异,越接近 1 越好 | 0.95 以上为正常 |
使用 Geekbench 做跨平台对比
Geekbench 的优势在于它的结果可以上传到官方数据库,让你和同价位的其他机器做对比:
1
2
3
4
5
6
7
8
9
10
11 # 下载 Geekbench 6(约 50MB)
wget https://cdn.geekbench.com/Geekbench-6.3.0-Linux.tar.gz
tar xzf Geekbench-6.3.0-Linux.tar.gz
cd Geekbench-6.3.0-Linux
# 运行(需要 sudo 获取完整 CPU 信息)
./geekbench6
# 运行完成后会输出一个 URL,例如:
# https://browser.geekbench.com/v6/cpu/12345678
# 点开就能看到单核和多核分数,以及和其他机器的对比
Geekbench 跑一次大约需要 5-10 分钟,测试范围涵盖加密、图像处理、机器学习、物理模拟等真实场景。对于 VPS 来说,多核分数 3000+ 算是不错的配置。
7-Zip 压缩基准测试
7-Zip 内置的基准测试可以同时测量 CPU 和内存子系统性能:
1
2
3
4
5
6
7
8
9 # 安装 7-Zip
apt install -y p7zip-full
# 运行压缩/解压基准测试
7z b
# 指定线程数,避免把机器跑死
7z b -mmt=$(nproc)
7z b -mmt=1 # 单线程版本
7-Zip 的测试结果会同时显示压缩速度(MIPS)和解压速度,这两个数值对数据库压缩、日志打包等场景有直接参考意义。
内存性能测试
内存带宽测试
1
2
3
4
5 # sysbench 内存测试(顺序写入 8MB 块)
sysbench memory --memory-block-size=8M --memory-total-size=10G run
# 多线程内存测试
sysbench memory --memory-block-size=8M --memory-total-size=10G --threads=$(nproc) run
重点关注:
- Total transferred:传输的总数据量
- Total data rate:内存带宽,单位 MiB/sec
- DDR4 ECC 内存通常能达到 10000+ MiB/sec,DDR3 一般在 5000-8000 MiB/sec
内存压力与稳定性测试
1
2
3
4
5
6
7
8 # 安装 memtester
apt install -y memtester
# 测试 1GB 内存,跑 2 轮
memtester 1G 2
# 测试全部可用内存(建议在非生产环境)
memtester $(free -m | awk '/^Mem:/{print $2}')M 1
如果你发现 memtester 报错(比如
1 | FAILURE |
或
1 | Stuck address |
),说明你的 VPS 内存可能存在硬件问题——这在超售严重的低端 VPS 上并不罕见。遇到这种情况,建议立即备份数据并向服务商提交工单。
Swap 性能测试
Swap 在 512MB 的小鸡上几乎是必需品,但它的性能差异巨大:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 # 检查 Swap 状态
swapon --show
# 测试 Swap 读写速度(需要 root)
dd if=/dev/zero of=/swap.img bs=1M count=1024 2>&1
# 记录写入速度
# 创建 Swap 文件(如果还没有)
dd if=/dev/zero of=/swapfile bs=1M count=1024
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
# 在 /etc/fstab 中添加使其永久生效
echo "/swapfile none swap sw 0 0" >> /etc/fstab
如果你的 Swap 在 SSD 上,读写速度应该在 200MB/s 以上。如果低于 50MB/s,说明你的磁盘可能是被超售的 OpenVZ 虚拟磁盘,或者母机的 I/O 已经被邻居榨干了。
磁盘 I/O 性能测试
磁盘性能是 VPS 体验中最关键也最容易被忽视的环节。很多服务商号称”SSD”,实际上可能是廉价的 SATA SSD 甚至超售的 NVMe。
fio 深度测试(推荐)
fio 是 Linux 上最专业的 I/O 基准测试工具,可以模拟各种真实的读写模式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 # 随机读取测试(4KB 块大小,队列深度 32)
fio --name=randread --ioengine=libaio --direct=1 --bs=4k --numjobs=1 --size=1G \
--runtime=60 --iodepth=32 --rw=randread --group_reporting
# 随机写入测试
fio --name=randwrite --ioengine=libaio --direct=1 --bs=4k --numjobs=1 --size=1G \
--runtime=60 --iodepth=32 --rw=randwrite --group_reporting
# 顺序读取测试
fio --name=seqread --ioengine=libaio --direct=1 --bs=1M --numjobs=1 --size=1G \
--runtime=60 --iodepth=32 --rw=read --group_reporting
# 混合读写测试(70% 读,30% 写)
fio --name=rwmix --ioengine=libaio --direct=1 --bs=4k --numjobs=1 --size=1G \
--runtime=60 --iodepth=32 --rw=randrw --rwmixread=70 --group_reporting
| 测试类型 | 关键指标 | NVMe SSD | SATA SSD | HDD |
|---|---|---|---|---|
| 随机 4K 读取 | IOPS | 50000+ | 5000-15000 | 100-200 |
| 随机 4K 写入 | IOPS | 30000+ | 3000-10000 | 100-200 |
| 顺序 1M 读取 | MB/s | 2000+ | 300-500 | 100-200 |
| 顺序 1M 写入 | MB/s | 1500+ | 200-400 | 80-150 |
如果你发现顺序读取很好但随机读取很差(比如顺序 500MB/s 但随机 4K 只有 1000 IOPS),这通常意味着你的 VPS 使用了网络存储(NFS、Ceph)而非本地 SSD,或者母机磁盘被严重超售。
快速 dd 测试
如果你不想安装 fio,可以用 dd 做快速测试。虽然精度不如 fio,但胜在方便:
1
2
3
4
5
6
7
8
9 # 写入测试
dd if=/dev/zero of=/tmp/test bs=1M count=1024 conv=fdatasync 2>&1 | tail -1
# 读取测试(需要先清空缓存)
echo 3 > /proc/sys/vm/drop_caches
dd if=/tmp/test of=/dev/null bs=1M count=1024 2>&1 | tail -1
# 清理
rm -f /tmp/test
注意:dd 测试的是顺序读写,无法反映真实数据库场景下的随机 4K 性能。所以它只能作为快速筛查,不能替代 fio。
网络性能测试
iperf3 端到端带宽测试
iperf3 测试需要两台机器配合——一台做服务端,一台做客户端。如果你有另一台机器,可以这样测:
1
2
3
4
5
6
7
8 # 服务端(在 VPS 上)
iperf3 -s -p 5201
# 客户端(在本地或另一台机器)
iperf3 -c YOUR_VPS_IP -p 5201 -t 30 -P 4
# 反向测试(测试下行带宽)
iperf3 -c YOUR_VPS_IP -p 5201 -t 30 -P 4 -R
如果你只有一台机器,可以用公共测试服务器:
1
2
3
4
5
6
7
8 # 测试到中国香港的带宽
iperf3 -c hk.speedtest.clouvider.net -t 30
# 测试到日本的带宽
iperf3 -c tokyo.speedtest.clouvider.net -t 30
# 测试到美国的带宽
iperf3 -c speedtest.nyc1.speedyrack.net -t 30
延迟和丢包测试
1
2
3
4
5
6
7
8
9
10
11
12
13 # 基础 ping 测试
ping -c 100 -i 0.2 YOUR_VPS_IP
# 使用 mtr 进行路由追踪(比 traceroute 更直观)
mtr -r -c 50 YOUR_VPS_IP
# 快速测试到国内三网的延迟
# 电信
ping -c 10 180.149.128.9
# 联通
ping -c 10 123.125.81.6
# 移动
ping -c 10 211.136.112.50
网络测试的参考标准:
- 延迟 50ms 以内:极佳,适合游戏、实时应用
- 延迟 50-150ms:正常,适合大多数 Web 应用
- 延迟 150-300ms:较差,建站体验一般
- 延迟 300ms+:很差,建议换机房
- 丢包率 > 1%:需要关注,TCP 性能会明显下降
- 丢包率 > 5%:必须换机器,无法正常使用
一键测试脚本
如果你不想手动执行每个工具,社区有一些非常好用的一键脚本:
1
2
3
4
5
6
7
8
9
10
11 # bench.sh —— 最经典的 VPS 测试脚本
curl -sL yabs.sh | bash
# 或者
wget -qO- bench.sh | bash
# SuperBench —— 针对国内用户优化
wget -qO- --no-check-certificate https://raw.githubusercontent.com/oooldking/script/master/superbench.sh | bash
# LemonBench —— 更详细的测试
curl -fsL https://ilemonra.in/LemonBenchIntl | bash -s -- --fast
这些脚本会一次性测试 CPU、内存、磁盘、网络,并生成格式化的报告。但要注意,一键脚本可能屏蔽了某些细节,在做调优时还是需要单个工具逐个排查。
如何识别超售和性能欺骗
经验丰富的站长可以通过一些特殊手段判断母机是否过度超售:
检查 CPU 型号和 Stepping
1
2
3
4
5
6
7
8 # 查看 CPU 详细型号
cat /proc/cpuinfo | grep "model name" | head -1
# 查看 CPU 虚拟化标志
cat /proc/cpuinfo | grep -c "flags" | head -20
# 查看是否被限制了 CPU 频率
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
如果你发现 CPU 型号是古老的 E5-26xx v2 系列(2013 年发布),而服务商宣传的是”最新 Intel 处理器”,那基本可以确定是在混淆视听。
检测磁盘超售
1
2
3
4
5
6
7
8
9
10
11 # 查看磁盘是否本地 NVMe
lsblk -d -o name,rota,size,model,tran
# 检查磁盘类型(virtio 表示虚拟磁盘)
ls -la /sys/block/ | grep -v virtio
# 检查 I/O 调度器
cat /sys/block/vda/queue/scheduler
# 查看磁盘是否被限速
cat /sys/block/vda/device/model
一个常见的超售手段是:用 Ceph 或 GlusterFS 做分布式存储,给每个 VPS 分配 50GB 但实际上母机只有 2TB 磁盘跑 100 台机器。这种情况下,你跑顺序读写可能很快(因为有缓存),但一旦多台机器同时写入,IOPS 会瞬间崩溃。
检查邻居数量
1
2
3
4
5
6
7
8 # 查看 CPU 缓存命中率(如果邻居太多,L2/L3 缓存会被频繁清空,命中率下降)
perf stat -e cache-misses,cache-references,cpu-cycles,instructions dd if=/dev/zero of=/dev/null bs=1M count=1024 2>&1
# 查看 /proc/cpuinfo 中是否有其他用户的 CPU 时间片被抢占
grep "steal" /proc/stat
# 使用 vmstat 观察 steal 时间
vmstat 1 10
如果
1 | steal |
值长时间超过 10%,说明母机严重超售,你买的 4 核 CPU 可能连 1 核的真实算力都拿不到。
性能测试自动化脚本
为了方便定期检测,下面是一个完整的自动化脚本,你可以在 crontab 中设置为每周运行一次:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 #!/bin/bash
# VPS 性能基线测试脚本
# 保存为 /root/benchmark.sh,chmod +x 后使用
REPORT_DIR="/root/benchmark_reports"
mkdir -p "$REPORT_DIR"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
REPORT_FILE="$REPORT_DIR/report_$TIMESTAMP.txt"
echo "=== VPS Performance Benchmark Report ===" > "$REPORT_FILE"
echo "Date: $(date)" >> "$REPORT_FILE"
echo "Hostname: $(hostname)" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
# 1. System Info
echo "=== System Info ===" >> "$REPORT_FILE"
lscpu | grep -E "Model name|CPU\(s\)|Thread|Core" >> "$REPORT_FILE"
free -h >> "$REPORT_FILE"
df -h / | tail -1 >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
# 2. CPU Benchmark (sysbench)
echo "=== CPU Benchmark (sysbench) ===" >> "$REPORT_FILE"
sysbench cpu --cpu-max-prime=20000 --threads=$(nproc) run 2>&1 | \
grep -E "events per second|total time" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
# 3. Memory Benchmark
echo "=== Memory Benchmark ===" >> "$REPORT_FILE"
sysbench memory --memory-block-size=8M --memory-total-size=10G --threads=$(nproc) run 2>&1 | \
grep -E "transferred|rate" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
# 4. Disk I/O (fio)
echo "=== Disk I/O (fio 4K random read) ===" >> "$REPORT_FILE"
fio --name=quicktest --ioengine=libaio --direct=1 --bs=4k --numjobs=1 --size=512M \
--runtime=30 --iodepth=32 --rw=randread --group_reporting 2>&1 | \
grep -E "IOPS|BW=" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
# 5. Network Speed Test
echo "=== Network Speed ===" >> "$REPORT_FILE"
speedtest-cli --simple 2>&1 >> "$REPORT_FILE" || \
echo "Speedtest unavailable" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
# 6. Steal Time Check
echo "=== CPU Steal Time (10s sample) ===" >> "$REPORT_FILE"
steal_avg=$(vmstat 1 10 | awk '{sum+=$17} END {print sum/NR}')
echo "Average steal time: ${steal_avg}%" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
echo "Report saved to: $REPORT_FILE" >> "$REPORT_FILE"
cat "$REPORT_FILE"
添加到 crontab:
1
2
3
4
5 # 每周日早上 6 点运行
0 6 * * 0 /root/benchmark.sh
# 如果你想每日对比(非生产环境)
0 6 * * * /root/benchmark.sh
常见问题解答
测试结果波动很大怎么办?
VPS 的测试结果本身就存在波动,因为你和邻居共享母机资源。建议:
- 连续测试 3 次取平均值
- 选择在凌晨 3-5 点(低峰期)测试
- 测试前关闭所有业务进程
- 如果波动超过 30%,说明母机超售严重,建议换服务商
什么情况下需要退款?
如果你的测试结果符合以下任意条件,建议立即备份数据并申请退款:
- 4K 随机读取 IOPS 低于 2000(标准的 SSD 最低线)
- CPU steal time 持续超过 15%
- 实际带宽不到购买标称的 20%
- 内存测试出现 FAILURE
- 磁盘容量和购买时标注的不符
测试本身会不会影响 VPS 性能?
会的。fio 和 sysbench 在测试期间会占用大量资源。如果你在跑生产业务:
- 先用
1nice -n 19
降低测试进程优先级
- 选择在业务低峰期测试
- fio 测试时使用
1--size=512M
而不是
1--size=10G,减少磁盘磨损
- Geekbench 比较重,建议在非生产机器上运行
总结
性能基准测试是 VPS 运维中最基础也最重要的一环。通过 sysbench、fio、iperf3 这三个核心工具,你可以全面评估一台 VPS 的真实性能,判断服务商是否存在超售,并在出现性能问题时快速定位瓶颈。
我建议所有 VPS 用户养成一个习惯:每台新机器到手后,先跑一轮完整的基准测试并保存报告。万一后续出现性能问题,这份报告就是你和服务商交涉的有力证据。
最后分享一个经验:不要只看价格。一台 $10/月的 VPS 如果 CPU steal 超过 10%,实际体验可能还不如一台 $5/月但清清爽爽的机器。把钱花在服务商的口碑和母机的配置上,远比追求最低价划算。
你平时用哪些工具测试 VPS 性能?有没有遇到过特别离谱的超售案例?欢迎在评论区分享你的经验。
(封面图:
)
汤不热吧