服务器性能测试指南:用数据验证你的 VPS 值不值

买服务器有点像买二手手机——商家标注的"8 核 16G"未必是真的。共享型 VPS 里,同一台母机上的邻居跑起高负载任务,你的 CPU 主频可能直接掉一半,磁盘 IO 崩成个位数。这也是为什么在 16IDC 的服务器选型流程里,拿到机器后的第一件事不是装面板,而是完整跑一遍基准测试,用数据而不是广告词做判断。

先跑一个综合测试

如果你只想做一件事,那就跑 yabs.sh。它把 Geekbench(CPU)、fio(磁盘)和 speedtest(网络)打包成一键脚本,十几分钟出一份完整报告:

curl -sL yabs.sh | bash

报告里会有单核/多核 Geekbench 分数、4K 随机读写的 IOPS、以及到全球节点的上下行带宽。拿 云服务商 宣传页上的规格跟这份报告逐项对照,有没有超售基本一眼就能看出来。跑完顺手把输出存成文件,这就是以后所有对比的基线。

参考:yabs 源码 https://github.com/masonr/yet-another-bench-script;Geekbench 官网 https://www.geekbench.com/

CPU:sysbench 与 openssl

sysbench 是最常用的 CPU 压测工具,Debian/Ubuntu 用 apt install sysbench,CentOS 系用 yum install sysbench

# 单核测试
sysbench cpu run

# 全部核心并行
sysbench cpu --threads=$(nproc) run

单核 events/sec 大致落在 500–2000,取决于 CPU 代际和主频。注意两块同样标着"4 核"的机器,多核跑分可能差出 30%——这正是真物理核心和超售的差别。如果站点要上 HTTPS,再顺手测一下 openssl 的对称加密吞吐:

openssl speed aes-256-cbc

AES-NI 指令集开没开,直接影响 TLS 握手和文件加密的实际吞吐,对高并发接口影响尤其明显。

内存与磁盘:瓶颈往往在 IO

内存用 sysbench 和 mbw 交叉验证:

sysbench memory --memory-block-size=1M --memory-total-size=10G run
apt install mbw -y && mbw 256

磁盘是 VPS 最容易翻车的地方。用 fio 分别测顺序读写(模拟大文件、视频)和 4K 随机读写(模拟数据库、动态页面):

fio --name=randread --ioengine=libaio --direct=1 --bs=4k --size=2g --numjobs=4 --iodepth=64 --rw=randread --group_reporting
fio --name=randwrite --ioengine=libaio --direct=1 --bs=4k --size=2g --numjobs=4 --iodepth=64 --rw=randwrite --group_reporting

务必保留 --direct=1,否则测试会被页缓存"美化",测出来的是内存速度而不是磁盘真实速度。4K 随机读 IOPS 长期低于 5000,基本可以断定这块盘正在被邻居折磨,或者是机械盘冒充 SSD。

不同存储介质的合理预期也值得记一下:NVMe SSD 的 4K 随机读通常在 5 万 IOPS 以上,SATA SSD 在 2-4 万,机械盘往往连 200 都摸不到。如果你的机器宣传是 NVMe,测出来只有几千,那要么超售导致 IO 被限流,要么被母机上的邻居吃掉了带宽。另外注意 VPS 的突发 IO:很多小厂给的是"短时峰值",fio 跑 30 秒和跑 5 分钟的结果可能差好几倍,长跑更接近真实负载。

网络:带宽与延迟要分开看

带宽用 iperf3,需要两端配合:服务端 iperf3 -s,客户端执行 iperf3 -c <server_ip> -t 30 -P 4-P 4 开四个并行流更能压出真实上限。延迟用 curl 直接看各阶段耗时:

curl -w "TCP: %{time_connect}s\nTTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n" -o /dev/null -s https://example.com

TCP 握手很快但 TTFB 很高,通常是源站处理慢或丢包重传,问题出在应用而不是线路。

定位线路问题还可以用 mtr:mtr -rwz <目标IP>,它会逐跳显示丢包和延迟。如果丢包集中在中间某几跳,那是骨干网问题,跟你的服务器无关;只有最后一跳(你的机器)丢包高,才需要去找服务商。

结果怎么读

测试项 一般 优秀
CPU events/sec(1 核) <300 300-800 800-1500 >1500
4K 随机读 IOPS <5000 5000-20000 20000-50000 >50000
4K 随机写 IOPS <3000 3000-10000 10000-30000 >30000
网络下载(Mbps) <100 100-500 500-1000 >1000

一个真实案例

有位站长买了一家小厂的 2C2G 促销机,宣传写着"NVMe SSD"。跑完 yabs 才发现 4K 随机读只有 3 千 IOPS,跟机械盘一个水平。他把完整报告截图发给客服,对方核对母机负载后直接给换了一台实例,重测 IOPS 到了 4 万。没有这组数据,这种扯皮基本没有胜算。

常见问题

  • 测试结果忽高忽低:VPS 是共享资源,尽量在业务低峰期测,多跑两轮取中位数。
  • 要不要每次都跑完整 yabs:不用,日常监控跑 sysbench CPU + 4K 随机读就够,几分钟出结果。
  • 跑分高但网站还是慢:先看网络延迟和丢包,再查源站应用本身,别一上来就怪服务器。

16IDC 建议

  1. 新机到手立刻跑一次完整 yabs,保存输出作为基线,并与宣传页核对。
  2. 明显低于宣传值时,先排除邻居干扰(换个时段重测),再联系服务商换实例或退款。
  3. 之后每月跑一次,跟基线对比。CPU 分数或磁盘 IO 突然掉一半,通常是同母机来了新邻居,或硬件开始老化。
  4. 测试要跟业务结合:跑 WordPress 重点看 4K 随机读和单核,跑视频站重点看带宽和顺序读,跑数据接口重点看内存带宽。
  5. 别只看峰值。跑分好看不代表高峰期稳,重点对比业务时段和非业务时段的差距,差距过大通常意味着超售或带宽限速。