技术指南

VPS 测评协议:保留原始样本、波动与适用边界

先固定场景、环境、测试预算和停止条件,再用重复样本、原始输出与波动范围形成可复查的 VPS 测评结论。

可信的 VPS 测评不是把几张峰值截图排成名次,而是让另一位测试者知道:测了哪台实例、为哪个负载、在什么环境和时间窗、消耗了多少资源、原始样本如何波动,以及结论到哪里失效。先写实验契约,再运行命令;单次结果只能成为一个样本,不能直接变成“稳定”“线路好”或“适合生产”的判断。

先把用户问题写成可证伪的测试契约

字段要写清楚什么避免的误判
场景静态站、数据库、CI、代理或学习机所有负载共用一个总分
成功条件例如 p95 响应、并发、恢复时间或构建时长只比较峰值吞吐
实例边界套餐、区域、虚拟化、镜像、内核、购买周期同名套餐长期不变
测试预算持续时间、样本数、文件/流量上限、冷却时间无限压测才更准确
停止条件空间、温度/负载、业务延迟、错误率和费用阈值为了凑结果继续施压
复查触发迁移、套餐/价格/线路变化或异常反馈一次结果永久有效
示例只展示实验字段;阈值必须来自自己的负载与风险预算
scenario: static-site-origin
success:
  p95_total_ms: '< 250'
  error_rate: '< 0.1%'
instance:
  plan: replace-me
  region: replace-me
measurement:
  samples: 5
  windows_utc: ['03:00', '12:00']
  max_test_gib: 1
stop_if:
  disk_free_percent: '< 20'
  workload_p95_ms: '> 400'

每轮先保存机器、负载和存储基线

显式单位、列与机器可读输出;同时保存命令版本和当前业务负载
date --utc --iso-8601=seconds
uname -srmo
systemd-detect-virt
lscpu --json
free --bytes --wide
lsblk --json --bytes --output NAME,TYPE,SIZE,ROTA,PHY-SEC,LOG-SEC,MOUNTPOINTS
df --block-size=1 --output=source,fstype,size,avail,target /path/to/test
cat /proc/loadavg

`free` 的 available 是在不发生交换的前提下启动新应用可用内存的估算,不等于 free 列;`lsblk` 的默认列会变化,脚本应显式指定列,并用 MOUNTPOINTS 保留一个文件系统的全部挂载点。CPU 型号、vCPU 数和磁盘名称也不足以证明独占资源,应同时记录虚拟化、steal/load、文件系统和测试时的其他进程。

一类指标只回答一个问题

测量可以支持的判断不能单独证明
CPU 固定算法同一算法和版本下的吞吐与波动通用应用性能或持续配额
文件 I/O指定文件系统、块大小、队列模型的结果云卷所有 IOPS/延迟场景
ICMP RTT/丢包该协议、源和目标之间的样本HTTP 可用性或带宽
iperf3两个受控端点间的 TCP/UDP 吞吐所有用户地区和目的服务
curl 时间DNS/连接/TLS/首字节/总耗时分段服务端内部根因
路径追踪某时刻可见的转发路径运营商产品标签或反向路径

每个结果都要绑定工具与版本、完整命令、UTC 时间、源/目标、IP 协议、样本数、冷/热状态和原始输出。先定义派生指标,再计算中位数、p95 或 spread;只发布平均值会隐藏长尾,只发布最好值会隐藏竞争。

CPU 微基准固定算法、时长和并行度

OpenSSL -mr 提供机器可读摘要;-elapsed 使用墙钟时间,算法、buffer、版本与 vCPU 策略都要一致
for run in 1 2 3; do
  openssl speed -elapsed -seconds 1 -bytes 16384 -mr sha256 \
    >"cpu-${run}.out" 2>&1
  sleep 1
done

运行前后都保存 load、steal、频率/调度信息和失败状态。共享 vCPU 若在不同时间窗出现明显 spread,应报告分布和最差窗口,而不是增加线程把总吞吐做大。跨架构比较必须说明算法实现和硬件加速差异。

磁盘测试只写受控临时文件

示例只验证受控文件、上限、同步和清理边界,不声称绕过缓存或测得随机 I/O
workdir=$(mktemp -d /tmp/vps-review.XXXXXX)
trap 'find "$workdir" -depth -delete' EXIT
test "$(df --output=avail -B1 "$workdir" | tail -1)" -gt $((512*1024*1024))
for run in 1 2 3; do
  time head --bytes=67108864 /dev/zero >"$workdir/io.bin"
  sync -d "$workdir/io.bin"
  time sha256sum "$workdir/io.bin" >/dev/null
done
必须固定原因
路径与文件系统不同挂载和云卷不是同一存储层
文件大小与块大小缓存命中和 I/O 合并会改变结果
direct/sync 语义durability 与 page cache 边界不同
读写/顺序/随机/队列深度它们代表不同工作负载
预热、运行时长与冷却突发额度和后台回收会制造峰值
总写入量保护 SSD 寿命、配额和邻居

GNU `dd` 的 `direct` flag 会请求 direct I/O,但内核可能施加对齐限制;`fdatasync` 只在结束前同步输出数据。需要随机读写、延迟分位数和队列深度时,使用适合的基准工具及经过审查的 job file;不要从 `dd` 的单个 MB/s 推导 IOPS 或数据库延迟。

网络结论拆成可达、时延、吞吐、路径和应用五层

对端要求最少输出
可达性真实服务端口DNS、TCP/TLS/HTTP 状态与失败原因
RTT/丢包多个用户区域探针源、目标、IPv4/IPv6、count、min/avg/max/mdev
吞吐自己控制的 iperf3 两端方向、时长、streams、sender/receiver 与 JSON
路径目标用户网络中的探针UTC、源 ASN/地区、每跳地址和丢失
应用代表性 URL/请求状态、内容校验、分段时间和并发
明确 IP 族和源接口;目标必须允许测试,失败输出同样保留
ping -4 -n -c 20 -W 1 -I SOURCE_ADDRESS TARGET
ping -6 -n -c 20 -W 1 -I SOURCE_INTERFACE TARGET

# ICMP 只验证该路径样本;再检查实际服务
curl --fail --silent --show-error --output /dev/null https://TARGET/health

`ping` 使用 ICMP Echo,能明确 count、deadline、timeout、源接口和 IPv4/IPv6,但目标可能限速或禁用 ICMP。0% ICMP 丢包不等于应用健康,ICMP 丢包也不必然等于 TCP/QUIC 同比例丢包;结论必须回到真实端口和用户区域。

吞吐只在两个受控端点间测

本批次没有安装或运行 iperf3;命令依据当前官方手册,使用前还要限制端口、来源和总流量
# server: limit duration and run only on an authorized host
iperf3 --server --one-off --server-max-duration 30

# client: save upload and reverse-direction JSON separately
iperf3 --client SERVER --time 15 --omit 3 --json > upload.json
iperf3 --client SERVER --time 15 --omit 3 --reverse --json > download.json

带宽测试与路径测试都要来自目标用户侧,而不只从 VPS 向热门站点发起。至少分开 IPv4/IPv6、上行/下行、不同运营商/地区和不同时段;共享带宽的短时 burst、月流量与超量规则属于套餐证据,不属于测速推断。

路径标签必须由多点原始路径支持

  1. 保存源地区、运营商/ASN、目标地址、UTC 与工具版本;匿名截图不足以复查。
  2. 正向和反向路径可能不同,单侧 traceroute 不能证明“回程”。
  3. 中间跳不回应或限速不表示端到端丢包;先看最终目标和应用证据。
  4. CN2、AS9929、CMI 等营销标签需要可复查的 ASN/路径样本,并限制到该时间与方向。
  5. 路由会变化;大促、迁移、异常反馈和定期窗口都应触发复测。

用真实工作负载把资源指标变成用户结果

同时校验状态和内容;真实测试还应保留请求 ID,并由服务端日志关联
curl --fail --silent --show-error --output /dev/null \
  --write-out '{"code":%{response_code},"dns":%{time_namelookup},"connect":%{time_connect},"tls":%{time_appconnect},"first_byte":%{time_starttransfer},"total":%{time_total},"bytes":%{size_download}}\n' \
  https://example.test/representative-path
curl 字段用途边界
time_namelookup名称解析完成时间受 resolver/cache 影响
time_connectTCP 建连完成时间包含此前阶段
time_appconnectTLS 等应用连接完成时间协议与会话复用会改变结果
time_starttransfer收到首字节时间包含服务端处理与此前阶段
time_total完整传输时间响应大小必须同时保存
response_code / bytes确认返回语义与载荷200 仍需内容校验

先单请求确认语义,再用代表性并发和数据集测试。记录缓存冷热、数据库规模、TLS/HTTP 版本、连接复用、响应大小、错误率和服务器侧 CPU/内存/I/O。静态文件快不代表 WordPress 或数据库快;本地 loopback 快也不代表用户网络快。

重复样本要跨时间窗,而不是连续刷最好值

阶段建议证据何时暂停
预检基线、空间、业务健康、测试预算任何边界不清楚
预热固定次数并标注不计入统计错误或负载无法恢复
样本至少三次原始结果与退出状态超过停止条件
冷却load、空间和业务指标回到基线未恢复则不继续
复测目标用户白天/峰值、IPv4/IPv6 和多区域对端未授权或流量预算不足
派生摘要必须能回到原始文件、完整命令和环境快照
{
  "test_id": "cpu-sha256-20260816T2100Z",
  "scenario": "repeatability-fixture",
  "command_sha256": "...",
  "tool_version": "OpenSSL 3.0.13",
  "samples": [265355264, 246071296, 269926400],
  "median": 265355264,
  "range_over_median_percent": 8.99,
  "unit": "bytes_per_second",
  "limitations": ["one host", "three one-second samples"]
}

发布原始样本、派生值和失败样本

  • 给每轮 test_id,保存 stdout/stderr、退出码、UTC 起止时间和命令哈希。
  • 原始文件只追加;派生 JSON/表格记录脚本版本,重算不覆盖原样本。
  • 中位数与 p95 同时附样本数和 spread;样本太少时不发布长尾百分位。
  • 超时、错误和被停止的运行进入结果集,不从图表中删除。
  • 日志去除令牌、Cookie、客户数据和不可公开 IP;公开前单独审阅。
  • 报告标明未运行的测试、无 IPv6/无目标地区探针等缺口。

价格、条款和利益关系单独取证

  1. 保存套餐页、结算页、币种、税费、首购/续费、周期、流量、超量和快照/备份费用的核对时间。
  2. 退款、SLA、滥用和取消规则引用当前官方条款;工单或口碑作为另一类证据,不冒充条款。
  3. 优惠、库存、线路和配置都加复查日期;无法持续复查时写成历史快照。
  4. 披露样机、赠金、联盟链接和付费关系,并让相同测试协议也适用于无佣金候选。
  5. 采购结论纳入迁移、备份恢复、支持和账号风险,不只除以跑分。

结论写成适用矩阵和失效条件

结论部分必须回答
适合哪些场景在本次门禁内通过,证据是什么
不适合哪项硬门槛失败或尚未验证
波动中位数、最差窗口、spread 与错误样本
未知未覆盖的地区、协议、持续时间或工作负载
成本首购/续费/附加费用和取证日期
替代如果关键门槛失败,下一候选为什么更合适
失效何种价格、迁移、路由、硬件或时间变化触发复测

本次演练验证了重复采样协议

VPScope 在一次性 0600 临时目录中保存机器可读基线,运行三次 OpenSSL SHA-256 一秒样本、三次 64 MiB direct write/read,以及五次 256 KiB loopback HTTP 和五次 loopback ICMP。CPU 三个样本的 range/median 为 8.99%;direct write 为 17.894%,direct read 为 38.517%。五次 HTTP 都返回 262,144 bytes,但首次 total 为 18.553 ms,之后为 1.463–2.013 ms,中位数 1.890 ms,清楚显示冷启动样本不能被静默丢弃。

演练只验证采集、重复、派生统计、边界与清理:64 MiB 临时文件不足以描述持续存储,loopback 不能描述提供商网络,单台主机单个窗口不能比较商家或长期稳定性。本批次没有安装/运行 iperf3,没有访问外部测速节点、提供商 API 或生产负载;临时目录完整删除。

一篇可发布测评的验收清单

  • 场景、硬门槛、实例、时间窗、预算、停止条件和复查触发都已写明。
  • 机器、虚拟化、内存、块设备、文件系统、负载和工具版本可复查。
  • 每个指标说明能回答和不能回答的问题,不用单次峰值替代稳定性。
  • 磁盘只写受控临时文件;网络只测授权对端,并记录方向、IP 族和流量。
  • 至少保留三次原始样本、失败样本、退出状态、中位数和 spread。
  • 应用探针校验状态、内容、响应大小和分段耗时,并能关联服务端证据。
  • 目标用户区域、峰值窗口、IPv4/IPv6 与正反方向的缺口被明确标注。
  • 价格、续费、条款、利益关系和取证日期与性能证据分开。
  • 结论包含适合、不适合、未知、替代项和明确失效条件。
  • 公开文件已经去除凭据和客户数据,原始证据仍可重算。

返回知识库