首頁 / 避坑指南 / 雲端伺服器記憶體頻寬檢測:容量達標為什麼還掉速

雲端伺服器記憶體頻寬檢測:容量達標為什麼還掉速

容量夠不代表頻寬夠,三維取證才看得清。

更新於 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 裡把這三個數和你付的單價放一起,算清溢價率再決定升級配置、換可用區還是走退款流程。

磁碟快取斷崖驗證

NUMA 綁定後頻寬仍貼著天花板,還差最後一證:用快取斷崖把「記憶體慢」和「磁碟慢」分開。做法是先熱讀、再冷讀同一個檔案,看頻寬在哪個工作集尺寸掉下去。

# 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 飆高,說明快取被限,不是記憶體問題。

跑分對照溢價率怎麼決策?

算每 GB 頻寬價格,溢價 >30% 且掉速 >20% 就降配或退款。

容量達標不等於頻寬達標,用 STREAM 加 Steal Time 與 NUMA 綁定交叉取證,再對照溢價率決定升配還是退款。

立即免費開始檢測 →