SSD Nodes Learn 🎉 VPS $5.50/月起
指南 Matt Connor作者: Matt Connor

如何看懂廉价 VPS 报价:避开隐藏成本与超售

逐行拆解廉价 VPS 报价,解释 vCPU 超售、无限带宽条款、NVMe 性能、续费价格与备份和 IPv4 费用,并提供可在退款期内完成的 30 分钟验收测试。

廉价 VPS 报价中未说明的内容

请反向阅读廉价 VPS 报价,因为价格是页面上最没有参考价值的数字。决定这台服务器是否值得使用的,往往是报价中没有写出的内容:vCPU 数量背后的超售比例,“无限”背后的合理使用条款,首个计费周期结束后的续费价格,以及备份和 IPv4 地址是否需要额外付费。本指南会逐行解读报价内容,然后提供一套验收测试。您可以在仍能申请退款时,在服务器上运行这些测试。

这并不意味着低价一定是陷阱。较旧的硬件、更高的部署密度、自助式支持和较低的平台冗余,都是实现低价的方式。您需要在用户替您发现问题之前,了解自己接受了哪些取舍。以下所有操作都在 Ubuntu 24.04 上运行,使用 2026 年 8 月可用的软件包。

vCPU 不是 CPU 核心

vCPU 是调度槽位,而不是一块实体硅片。在 KVM(基于内核的虚拟机)中,每个 vCPU 都是宿主机上的一个线程,宿主机调度器会在轮到它运行时,将该线程调度到物理核心上。宿主机可以将 4 个 vCPU 分配给 1 个物理核心,而每个虚拟机仍会在 nproc 中报告完整的 vCPU 数量。套餐列表中的数字只是您可以申请的上限,并不表示这些资源会为您预留。

超售比率表示宿主机为每个物理核心出售的 vCPU 数量。比率为 1:1 时,该核心仅供您使用。低价套餐通常采用更高的超售比率,而且服务商几乎从不公布具体数值。因此,凡是没有注明“独享核心”或“独享 vCPU”的套餐,都应视为共享资源。共享资源适用于大多数任务,因为大多数服务器大部分时间都处于空闲状态。但如果您的高负载时段恰好也是其他用户的高负载时段,共享资源就会出现问题。

您可以在虚拟机内部测量其影响。当您的 vCPU 已准备好运行,但宿主机将物理核心分配给其他虚拟机时,这段等待时间会计入 steal time:它显示在 vmstatst 列中,以及 top%st 中。Steal time 会在您自己的指标中显示出邻居虚拟机的干扰,它是本指南中最有用的指标,因为服务商无法伪造这个数值。

独享核心仍可能在其他方面与他人共享。内存带宽、末级缓存和存储路径属于整台宿主机。“独享 vCPU”可以消除最大的性能波动来源,但不能消除所有波动。

还要使用 lscpu 检查 CPU 型号。两个套餐都可能标注为“4 vCPU”,但单线程速度可能相差一倍,因为其中一台宿主机使用的 CPU 可能老了好几代。以较低价格使用旧 CPU 适合作为构建代理,但不适合承载结账页面。

“无限带宽”至少代表4种不同的产品

流量通常有4种计费或限制方式,彼此不能互换。

  • 按量计费的流量额度。套餐会给出一个数值,例如“每月2 TB”。关键是超出额度后会发生什么:按每增加1 TB收取超额费用,还是将速度降低到很低的水平,直到下个月开始。请在需要知道之前确认具体规则。
  • 带合理使用条款的不限量套餐。流量不计量,但可接受使用政策会用文字而不是数字规定限制。请在该文档中搜索“fair use”“sustained”“excessive”和“abuse”。
  • 端口速率上限。100 Mbit/s端口会受到物理速率限制,与流量政策无关。
  • 前两种方式的组合:流量不限量,但端口速率较低。这是低价套餐中最常见的形式。只要确认端口速率,这种方案本身并不虚假。
ChartTraffic ceiling set by port speed alone, 30 days at full rate
The data behind this chart
[
  {
    "label": "100 Mbit/s",
    "tb_ceiling_30d": 32,
    "hours_per_tb": 22.2
  },
  {
    "label": "200 Mbit/s",
    "tb_ceiling_30d": 65,
    "hours_per_tb": 11.1
  },
  {
    "label": "500 Mbit/s",
    "tb_ceiling_30d": 162,
    "hours_per_tb": 4.4
  },
  {
    "label": "1 Gbit/s",
    "tb_ceiling_30d": 324,
    "hours_per_tb": 2.2
  }
]

端口速率是硬上限,计算很简单。100 Mbit/s等于每秒12.5 MB,因此该端口以满速运行30天时,传输量约为 32 TB。同样运行30天,1 Gbit/s端口可传输 324 TB。这里的TB表示10^12 bytes,也是主机商计费时使用的单位。这只是理论计算,不是实际测量;现实中的服务器不会让端口连续满速运行一个月。

第二列数据会影响套餐选择。在100 Mbit/s端口上移动1 TB数据大约需要 22.2 小时,在千兆端口上需要 2.2 小时。如果您的恢复方案是“下载备份并重新启动”,这个数字就是恢复时间。

这项规格中还隐藏着另外两个细节。“1 Gbit/s shared”表示该端口与其他客户共享,因此上面的上限只是最佳情况,并非服务商的保证。有些主机商还会按照采样速率的第95百分位计费,而不是按总流量计费。在这种计费方式下,持续稳定的负载通常比突发负载便宜得多。

无论套餐如何规定,都应测量您自己的使用量。vnstat会读取网络接口计数器并保存历史记录。

sudo apt install -y vnstat
sudo systemctl enable --now vnstat
vnstat -d
vnstat -m

安装完成后,vnstat会立即输出 Not enough data available yet.,因为其数据库还没有采样数据。第二天再查看,vnstat -m会提供月度总量,您可以将其与所购买套餐的流量额度进行比较。

NVMe 的说法是否属实?如何检查?

lsblk -d -o NAME,ROTA,SIZE,MODEL

ROTA 为 0 表示虚拟机被告知该设备不是旋转介质。该值来自虚拟机监控程序,因此描述的是主机对外公布的属性,而不是底层介质。对于 /dev/vda 这类 virtio 磁盘,MODEL 列通常为空;对于通过 SCSI 连接的磁盘,该列会显示通用的 QEMU HARDDISK。您查看的是虚拟磁盘,因此其标签不能证明任何事情。

真正值得检查的是延迟,而关键区别在于本地 NVMe 和网络连接的卷。网络卷可以报告很高的顺序吞吐量,但实际使用仍可能很慢,因为吞吐量是在有多个请求并行处理时测得的,而数据库每次只等待一个小写入完成。先在队列深度为 1 时测量延迟,再使用更深的队列测量 IOPS(每秒输入/输出操作数)。

sudo apt install -y fio
fio --name=lat --filename=fiotest --size=1G --direct=1 --ioengine=libaio --rw=randread --bs=4k --iodepth=1 --numjobs=1 --runtime=60 --time_based --group_reporting
fio --name=iops --filename=fiotest --size=1G --direct=1 --ioengine=libaio --rw=randread --bs=4k --iodepth=32 --numjobs=1 --runtime=60 --time_based --group_reporting
rm -f fiotest

查看 clat percentiles 块,尤其是第 99.00 行。该值表示最慢的 1% 请求所经历的完成延迟,也是用户感知到卡顿的原因。作为大致参考,队列深度为 1 时,本地 NVMe 通常在数百微秒内响应,而网络连接的卷通常以毫秒计。请比较您自己的两次测试结果,不要依赖任何单一的公开数据;并在一天内分 3 次运行这组测试,因为与其他租户共享的磁盘在 03:00 和 20:00 的表现可能不同。

fio 会先在磁盘上写入 1 GB 文件,因此请预留足够的磁盘空间,并注意测试会消耗套餐提供的 IOPS 配额。只想快速读取结果时,ioping -c 20 . 可在一行中给出延迟。基准测试只有能够重复执行才有意义,因此请保存完整的命令行、输出结果以及对应日期。

包含哪些内容,以及哪些项目需要额外付费

  • IPv4。通常包含一个地址。部分低价套餐会在 NAT(网络地址转换)后提供共享地址,并只转发少量端口。这意味着您无法在自己的服务器上使用 443 端口运行服务。使用 ip -4 addr show scope globalcurl -4 https://icanhazip.com 检查。如果两者返回的结果不同,说明您位于 NAT 后。
  • IPv6。路由到您的 /64 网段可为容器以及任何需要从外部访问的服务提供地址。单个 /128 只能满足出站流量,其他用途很有限。
  • 备份。自动备份通常需要额外付费。快照通常免费,但快照与其复制的磁盘位于同一基础设施上。因此,它只能帮助您恢复误操作,无法防止主机丢失。无论套餐包含哪些内容,都应在服务器之外保留一份副本。
  • DDoS 处理。许多主机在遭受大流量 DDoS(分布式拒绝服务)攻击时,会在固定时间内将您的 IP 地址进行 null route。服务器本身仍然正常运行,但无法从互联网访问。请询问触发阈值,以及 null route 会持续多长时间。
  • 支持范围。使用非托管套餐时,您就是系统管理员,主机方只负责 hypervisor 和网络。这是两个规格相同的套餐之间最大的实际成本差异。
  • 许可证和控制面板。控制面板、商业操作系统或邮件附加服务的月费,可能高于服务器本身的费用。

您购买的是哪种虚拟化类型?

systemd-detect-virt

kvmqemu 表示完全虚拟化:您拥有自己的内核,并可选择要加载到其中的模块。lxclxc-libvirtopenvz 表示与宿主机共享内核的容器。none 表示裸机。

共享内核会带来限制。sudo modprobe wireguard 会失败,ip link add dev wg0 type wireguard 会返回 RTNETLINK answers: Operation not supported,因为容器无法加载宿主机尚未加载的内核模块。缺少 lxcfs 时,free -h 可能报告宿主机内存,而不是您的内存,因此监控读到的数值并不代表您的服务器。Swap 通常也会与其他容器共享,而且根本无法在您的 VPS 中运行虚拟机。容器方案价格更低是有原因的;对于静态站点或小型应用,它们仍然是合适的选择。

续费价格是多少?

广告价格通常只适用于第一个服务周期。在订单页面查找“续费价格为”等字样,并确认折扣对应的服务周期。仅持续一年的折扣,与在整个套餐有效期内锁定的折扣,虽然首张账单相同,实际却是两种不同的产品。

退款条款也要同样仔细地阅读。确认退款期限有多长、从下单时间还是从服务开通时间开始计算、额外 IP 地址等附加服务是否可退款,以及年度预付费用是否按比例退还。然后在日历中设置提醒,在续费日期前一周提醒自己,因为在账单生成前退出,成本最低。

之后再切换服务也并非没有成本。迁移几百 GB 的数据、重新构建配置、等待 DNS(域名系统)的生存时间值更新,以及对于邮件服务器重新建立 IP 信誉,这些工作加起来可能占满整个周末。认为某项节省很可观时,也要把这个周末的成本计算在内。应比较的是VPS 一年实际产生的成本,而不是第一个月的价格。

30 分钟验收测试

在迁移任何内容前,先在新服务器上运行此测试,并确保退款期限尚未结束。先完成安全加固:新 VPS 上的前 10 分钟涵盖用户账户、密钥和防火墙配置。然后安装所需工具。

sudo apt update
sudo apt install -y sysbench fio ioping sysstat stress-ng vnstat mtr-tiny curl

检查 1:服务商实际提供了什么?

systemd-detect-virt
nproc
lscpu | grep -E 'Model name|MHz|Hypervisor'
free -h
lsblk -d -o NAME,ROTA,SIZE,MODEL
ip -4 addr show scope global
curl -4 -s https://icanhazip.com

您应该能看到虚拟化类型、CPU 型号,以及与购买套餐相差不超过几个百分点的内存数值。free -h 报告的内存远高于套餐标称值,通常表示容器未运行 lxcfs,而不是您获得了额外内存。curl 提供的公网地址如果从未出现在 ip -4 addr 中,说明 IPv4 地址是共享的。

检查 2:单线程速度是多少?负载下有多少 steal?

sysbench cpu --cpu-max-prime=20000 --threads=1 run

记录 events per second 行。单线程速度决定页面渲染速度和构建耗时,也是廉价套餐之间差异最大的指标。现在让所有 vCPU 满载,并观察调度器实际分配给您的资源。

stress-ng --cpu 0 --timeout 300s &
vmstat 1 30
mpstat -P ALL 1 10

--cpu 0 会为每个在线 CPU 启动一个工作进程。在 vmstat 中观察 st 列,并在 mpstat 中观察 %steal。共享套餐偶尔出现个位数属于正常现象。如果 steal 连续数分钟达到两位数,说明物理核心超售,您的任务正在排队等待其他租户释放资源。负载运行时再次执行 sysbench:如果单线程得分大幅下降,说明各 vCPU 之间正在争用资源。这通常表示它们是同一个核心上的兄弟线程,而不是独立核心。另一种情况是得分较低但 steal 接近 0,说明主机对 CPU 应用了配额;在客户机内部通常无法直接看到这一限制。

检查 3:磁盘在队列深度 1 下的表现如何?

运行 NVMe 部分中的两条 fio 命令,并保留两项结果:队列深度 1 下的 99 分位延迟,以及深度 32 下的 IOPS。然后检查写入性能,因为许多卷在写入方向上的速度要慢得多。

fio --name=wlat --filename=fiotest --size=1G --direct=1 --ioengine=libaio --rw=randwrite --bs=4k --iodepth=1 --numjobs=1 --runtime=30 --time_based --group_reporting
rm -f fiotest

dd 顺序性能是产品列表最喜欢标出的数字,也是您能收集到的最不实用的指标,因为数据库或繁忙的 Web 应用通常不会整天进行顺序流式读写。如果您需要进行对比,可以记录该数值。重点评估延迟。

检查 4:从用户所在位置看,网络表现如何?

首先将较大的文件下载到 VPS。

curl -o /dev/null -w 'in: %{speed_download} bytes/s\n' https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.tar.xz

这只能测试进入服务器的一条路径,不能说明其他情况。真正重要的是用户访问所经过的方向,因此应在服务器上提供文件,再从靠近用户的机器下载。

fallocate -l 100M /var/tmp/100mb.bin
python3 -m http.server 8080 --directory /var/tmp

然后,在靠近用户群体的笔记本电脑或服务器上执行:

curl -o /dev/null -w 'down: %{speed_download} bytes/s\n' http://YOUR_SERVER_IP:8080/100mb.bin
mtr --report --report-cycles 50 YOUR_SERVER_IP

测试期间必须在防火墙中开放 8080 端口。完成后关闭该端口并删除文件,然后使用 Ctrl+C 停止 Python 服务器。在 mtr 输出中,读取最后一行的丢包列。中间跃点出现丢包但目标端没有丢包属于正常现象,因为路由器会以低优先级响应 mtr 统计的 ICMP(Internet Control Message Protocol,互联网控制消息协议)请求;这不表示您的网络流量发生丢失。最后一行出现丢包才是真实丢包。

在用户访问高峰时段重复网络测试。02:00 的单次采样只能反映网络空闲时的情况。

将全部 4 项结果连同日期保存到文件中,然后在 1 个月后重新运行这些测试。第一天表现正常、到第 6 周变慢的套餐,通常说明主机资源已经被占满;保存第一天的数据,才能确认这一点,而不是靠猜测。

何时应选择廉价 VPS

低价能换来实际配置,也会带来实际代价。较旧的 CPU、更高的超售比例、更慢的网络存储、依赖自助服务的支持,以及更少的冗余,都是价格较低的原因。应根据用途进行匹配。

对于开发服务器、CI runner、VPN 端点、监控节点、备份目标或静态网站,廉价方案是合理选择。这些服务偶尔变慢一分钟通常不会造成问题。如果延迟本身就是产品的一部分,廉价方案就不划算,例如结账页面、交互式 API、游戏服务器,或其他服务必须等待其响应的数据库。上面的测试会告诉您实际购买的方案属于哪一类,而且在得出结论仍无需付出成本时就能得到答案。

FAQ

低价 VPS 产品中的 vCPU 是什么意思?

vCPU 是分配给虚拟机的一颗虚拟处理器。条件允许时,宿主机调度器会将其映射到物理核心上的一个线程。它表示可申请的 CPU 时间,而不是预留的硬件,除非产品说明写明“dedicated core”或“dedicated vCPU”。宿主机提供的 vCPU 数量通常多于物理核心数量,而且这个超售比例很少公开,因此应自行测量。运行 stress-ng --cpu 0 --timeout 300s,并观察 vmstat 1 中的 st 列。如果 steal 长时间达到两位数,表示您正在等待被其他虚拟机使用的核心。

“unlimited bandwidth” 真的是无限流量吗?

不是。限制通常位于产品说明之外的两个地方。可接受使用政策会用文字规定合理使用上限,端口速率则会以字节数设置硬性上限。即使始终满速运行,100 Mbit/s 端口在 30 天内也无法传输超过约 32 TB。因此,请确认端口速率,并在政策中查找“fair use”和“sustained”这两个词。然后使用 vnstat -m 跟踪实际发送的数据量,并与流量额度比较。

如何判断 VPS 是否真的使用 NVMe?

您无法从虚拟机内部确认物理介质,因为 lsblk 只能报告 hypervisor 提供的信息:ROTA 为 0,型号字符串为空或为通用值。您可以测量的是实际性能。使用 --direct=1 运行 fio,并在 --iodepth=1 处读取 99.00 百分位的完成延迟。本地 NVMe 的响应时间通常为数百微秒,而网络连接的卷即使顺序吞吐量看起来很高,响应时间也通常为毫秒级。请在一天中的不同时间重复测试几次,因为共享磁盘在 03:00 和 20:00 的性能可能不同。

退款期限结束前应测试什么?

按以下顺序测试四项内容。通过 systemd-detect-virtlscpufree -h 确认实例的实际配置。通过 sysbench cpu --cpu-max-prime=20000 --threads=1 run 测试单线程性能。让系统处于满负载,并使用 vmstat 1 监控通过 stress-ng --cpu 0 观察到的 steal time。使用 queue depth 1 的 fio 测试磁盘延迟。然后从靠近用户的机器上使用 mtr 测试网络,并下载一个由该实例提供的文件。30 分钟足以完成全部测试。在迁移任何内容前完成测试,可以保留退款期限这一谈判筹码。