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