首页 / 避坑指南 / 云服务器内存带宽检测:容量达标为什么还掉速

云服务器内存带宽检测:容量达标为什么还掉速

容量够不代表带宽够,三维取证才看得清。

更新于 2026-10-07 · CloudWorth

内存带宽STREAMNUMA超卖检测FinOpsCloudWorthSteal Time云服务器超卖VPS检测

云服务器内存带宽检测:容量达标为什么还掉速

容量达标不等于带宽达标,用 STREAM 加 Steal Time 与 NUMA 绑定交叉取证,再对照溢价率决定升配还是退款。

先测容量再测带宽

买云服务器时,几乎所有人第一眼看的是内存容量:8GB、16GB、32GB。容量写进订单页,看得见、对得上,于是被默认为「内存没问题」。但容量只是仓库面积,带宽才是叉车速度——8GB 的实例完全可能在容量全绿的情况下,内存吞吐只有同代标称的一半。

这就是容量达标却掉速的经典场景:AI 推理、向量检索、Redis 大 value、JVM 堆内复制这类负载,对 GB/s 的敏感度远高于对 GB 的敏感度,容量够用反而先撞带宽天花板。

先做两步分离:

  1. 容量侧:free -h 看 total/available,再和订单规格对一遍,确认没有被隐藏的 balloon 驱动回收。KVM 下可查 dmesg | grep -i balloon。
  2. 带宽侧:容量对得上不代表带宽对得上,需要专门的内存吞吐测试,下一节展开。

顺序必须是先容量后带宽。容量不达标,是虚标,直接走退款;容量达标而带宽掉,才是更隐蔽的超卖 / 限速问题,需要用下面这套取证链。

一个经验判据:如果你买的是「同等容量但价格明显低一档」的实例,先默认带宽是可疑项,而不是默认捡到便宜。这类便宜往往来自 CPU 超分、NUMA 跨节点布局或内存频率降档,最终以性价比溢价率的形式反噬——容量买了,吞吐没买到。

做完原始数据的记录(实例规格、地区、镜像、计费类型、下单时间),再进入实测。记录本身是后续工单与降配决策的证据,工单里只写「内存很慢」几乎不会得到有效处理。

STREAM 与 sysbench 实测

内存带宽检测有两套互补的工具:STREAM 测的是可持续的向量吞吐(Copy/Scale/Add/Triad),sysbench memory 测的是更贴近「小块读写」的场景。sysbench vs STREAM memory bandwidth test for cloud servers 的争论没有意义,两者都要跑,因为它们的失真方向不同:STREAM 对小实例的 L3 缓存过于友好,sysbench 对指令开销过于敏感,交叉看才不会被单点数字骗到。

STREAM 用法(无 root 也可编译到 home 目录):

sudo apt install -y gcc gfortran make
# 下载 stream.c 后:
gcc -O3 -fopenmp -DSTREAM_ARRAY_SIZE=200000000 stream.c -o stream
OMP_NUM_THREADS=$(nproc) ./stream

数组大小按内存的 1/4~1/2 设,太小会全落在缓存里,跑出「虚高带宽」;否则你测的是 L3 不是 DRAM。

sysbench 侧:

sysbench memory --memory-block-size=1M --memory-total-size=20G --memory-oper=read run
sysbench memory --memory-block-size=1M --memory-total-size=20G --memory-oper=write run

判定要点有三条:

  • 单核 vs 满核:分别跑 taskset -c 0 和全核,记录 GB/s。若全核几乎不涨,说明带宽已被限死,不是核数不够。
  • 和标称对照:DDR4 与 DDR5 的代际差约在 1.5~2 倍量级,同代同频的云实例之间不该出现两三倍差距,出现即异常。
  • 换算成 vCPU 人均带宽:总带宽 / vCPU 数 是判断内存带宽超卖最实用的指标。共享型实例人均带宽往往只有独享型的一半,这正是云服务器溢价率的真实来源之一。

跑三遍取中位数,避开整点邻居高峰。想把这套数字自动换算成人均带宽与溢价率,可在 /app 里建模板,把 STREAM、sysbench、实例价格一起录入,生成可对比的性价比档案。下一节用 Steal Time 和 NUMA 把「掉速」归因到具体原因。

Steal Time 与 NUMA 取证

上一节只能证明「掉速了」,归因还得靠另两个指标:Steal Time 和 NUMA 拓扑。这也是云服务器内存带宽检测里最容易被跳过的一层——容量够、单跑也达标,瓶颈却藏在调度和内存亲和性里。标称配置页从不写这两项,真实跑分的差距往往就出在这。

先看 st:

vmstat 1 10        # 盯 st 列(Steal Time)
mpstat -P ALL 1    # 逐核 %steal

st 长期 >3% 且与带宽下滑同步,说明 vCPU 时间正被邻居借走。共享型 KVM 上 CPU steal 与内存带宽的相关性极高,掉的是整条通路,不只是算力。

再看 NUMA:

lscpu | grep -i numa
numactl --hardware
numactl --cpunodebind=0 --membind=0 \
  sysbench memory --memory-block-size=1M --memory-total-size=20G --memory-oper=read run

把进程绑到本地节点后带宽明显回升,就是跨节点惩罚(常见 20%~40%),不是超卖;若绑定后依然贴着人均带宽天花板,才是真限速。

拿 st、NUMA 拓扑、绑定前后带宽三张截图去开工单,比空口说「变慢了」有效得多。想沉淀成可复用的取证模板,可在 /app 里把这三个数和你付的单价放一起,算清溢价率再决定升配、换可用区还是走退款流程。

磁盘 Cache 断崖验证

NUMA 绑定后带宽仍贴着天花板,还差最后一证:用 cache 断崖把「内存慢」和「盘慢」分开。做法是先热读、再冷读同一个文件,看带宽在哪个工作集尺寸掉下去。

# 1) 热路径:让 page cache 命中,测的是缓存速度
fio --name=hot --filename=/data/blob --rw=read --bs=1M \
    --size=4G --direct=0 --runtime=30 --time_based

# 2) 冷路径:清缓存后测真实内存→IO 通路
sync && echo 3 > /proc/sys/vm/drop_caches
fio --name=cold --filename=/data/blob --rw=read --bs=1M \
    --size=4G --direct=1 --runtime=30 --time_based

判读要点:

  • 冷读带宽随工作集从 256M 涨到 4G 呈平滑下降,是正常的内存层级与预取行为;
  • 跌成断崖(比如 2G 前后直接腰斩),且断点远小于实例标称 L3/缓存预期,通常说明内存带宽被节流,而不是磁盘先撑不住;
  • 顺手看 vmstat 1 里的 bi/bo 与 si/so,若 IO 不高但吞吐骤降,锅基本在内存侧。

这也是「真实跑分 vs 标称配置」最容易翻车的地方:8GB 实例标称 DDR4/DDR5 与容量都没错,可一旦 AI 推理的 KV cache 或向量检索把工作集顶出缓存,带宽就先掉,延迟随即抖动。把断崖点、NUMA 绑定前后带宽、%steal 三个数和你实际付的单价放在一起算溢价率,再决定升配、换可用区还是走退款,比反复重启有效得多。需要现成的取证模板,可在 /app 里直接套用。

一句话:容量达标只是入场券,云服务器 内存带宽 检测要看的是掉速的拐点在哪、拐点之后你还按什么价买单。

跑分对照与溢价决策

前文已经拿到三组硬数据:STREAM 的 Copy/Triad、NUMA 绑定前后的带宽差、以及 %steal 曲线。现在就差最后一步——把它们和账单对齐。做法很简单,把同一台实例的「标称 vs 实测」写成两列:

# 实测带宽(GB/s)
sysbench memory --memory-block-size=1M --memory-total-size=10G run | grep transferred
# 单价(元/GB 内存/月)= 月费 / 标称容量
# 性价比 = 实测带宽 / 单价

判读线可以粗糙一点,但必须有数:

  • 实测带宽达到同代 DDR4/DDR5 公开值的 70% 以上,%steal 常态低于 2%:正常共享,继续用;
  • 带宽只有标称预期的 50%~70%,且 NUMA 绑定能拉回 15%+:属于调度问题,换可用区或指定 vCPU 亲和性往往比升配便宜;
  • 带宽低于 50% 且 %steal 长期 5% 以上、Cache 断崖又提前出现:这就是典型的 VPS 超卖信号,属于 detect cloud server overselling 的实锤。

把性价比算出来再谈动作。假设 8GB 实例月费 120 元,实测带宽只有同价位 AMD EPYC 实例的六成,那你的溢价率其实就是 40%——此时升配到 16GB 往往只是把「每 GB 更贵」放大,换机型或走退款更划算。升级前先算溢价率,退款前先留证据:把三次跑分原始输出、vmstat 里的 %steal、numactl --hardware 截图一起提交,工单里只写数据不写形容词,翻案率高得多。续费前同样跑一遍,防止续费偷偷降配。完整的取证表格与工单模板在 /guides/memory-bandwidth-checklist,可以直接抄。

记住结论:容量达标不等于带宽达标,用 STREAM 加 Steal Time 与 NUMA 绑定交叉取证,再对照溢价率决定升配还是退款。

常见问题

内存容量达标但带宽掉速怎么查?

先 STREAM 测实际带宽,再对比标称值,差 30% 以上即异常。

STREAM 怎么跑才准?

绑 NUMA 节点,taskset 绑核,多线程测 3 次取中位数,避开邻居高峰。

Steal Time 多少算异常?

持续 >5% 即被超卖,结合 vmstat 看 st,超 10% 直接取证退款。

怎么判断是缓存断崖不是内存慢?

用 dd 测磁盘,带宽骤降且 iowait 飙高,说明 Cache 被限,不是内存问题。

跑分对照溢价率怎么决策?

算每 GB 带宽价格,溢价 >30% 且掉速 >20% 就降配或退款。

容量达标不等于带宽达标,用 STREAM 加 Steal Time 与 NUMA 绑定交叉取证,再对照溢价率决定升配还是退款。

立即免费开始检测 →