欢迎光临

VPS 性能基准测试与硬件诊断完全指南:用开源工具精准评估你的服务器真实性能

为什么你需要对 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 在测试期间会占用大量资源。如果你在跑生产业务:

  • 先用
    1
    nice -n 19

    降低测试进程优先级

  • 选择在业务低峰期测试
  • fio 测试时使用
    1
    --size=512M

    而不是

    1
    --size=10G

    ,减少磁盘磨损

  • Geekbench 比较重,建议在非生产机器上运行

总结

性能基准测试是 VPS 运维中最基础也最重要的一环。通过 sysbench、fio、iperf3 这三个核心工具,你可以全面评估一台 VPS 的真实性能,判断服务商是否存在超售,并在出现性能问题时快速定位瓶颈。

我建议所有 VPS 用户养成一个习惯:每台新机器到手后,先跑一轮完整的基准测试并保存报告。万一后续出现性能问题,这份报告就是你和服务商交涉的有力证据。

最后分享一个经验:不要只看价格。一台 $10/月的 VPS 如果 CPU steal 超过 10%,实际体验可能还不如一台 $5/月但清清爽爽的机器。把钱花在服务商的口碑和母机的配置上,远比追求最低价划算。

你平时用哪些工具测试 VPS 性能?有没有遇到过特别离谱的超售案例?欢迎在评论区分享你的经验。

(封面图:VPS服务器性能测试

【本站文章皆为原创,未经允许不得转载】:汤不热吧 » VPS 性能基准测试与硬件诊断完全指南:用开源工具精准评估你的服务器真实性能
分享到: 更多 (0)