結論:兩條成立,再算月租
整點那幾秒變慢,在共用宿主上很常見。為了這個尖峰換裸機,多半會買到一台填不滿的機器。 取樣放在平日尖峰,間隔 1 秒或 10 秒,至少蓋住五個工作日。凌晨備份另存,不要和午尖峰合成一句話。 兩條曲線都跟著介面 p95 走,才打開價目。只中一條,先在雲端加大規格,下週用同一個窗口再量。
整臺拿走的是旁邊那位用戶。慢 SQL、缺索引、鎖等待都還在。用戶離機房很遠,往返也不會因為 steal 消失就縮短。先確認慢在算力和硬碟,再算月租。
三種名字,對到哪一欄
雲端主機
常見雲端主機是 KVM 這類虛擬機,宿主上還有別人。客戶機看得到 steal:vCPU 已經可以跑,這段時間卻分給了旁邊的用戶。 硬碟多半是網路磁碟,IOPS 按規格或點數計算。記憶體有規格上限,宿主還可能用 balloon 把暫時用不到的頁收回去。 雲端主機和獨立伺服器的差別,先看這三欄有沒有「別人」。
VPS
VPS 要先分是虛擬機還是容器。虛擬機型態的 VPS 和雲端主機同一套曲線,核數和記憶體上限通常更小。 容器沒有 steal 這一欄。CPU 被配額卡住時,數字在 cgroup 的節流次數;記憶體上限寫在記憶體控制器上。 把節流讀成「機器壞了」會判錯。讀成「規格到頂」,才和虛擬機的 steal 對得上。 VPS 和獨立主機的差別也在這裡:VPS 仍是從一台宿主切出來的一份,裸機把排程交給一個客戶。
裸機
這篇裡的裸機、實體機、獨立伺服器指同一件事:整臺交給一個客戶。 宿主作業系統裡,steal 應接近 0,因為佇列上沒有另一家。 硬碟是插在這臺機器上的 NVMe。記憶體是這臺上的實體條,容量在下單時選定。 裸機和雲端主機的差別,用這三欄就能核對。
三條曲線怎麼讀
CPU:steal 連著偏高
steal 是「我想跑,宿主把 CPU 給了別人」的時間。Linux 上 vmstat 的 st、top 的 %st 都是這個百分比。
Prometheus 取 node_cpu_seconds_total 的 steal 模式做 rate,再按核平均。
偶發幾秒到十幾秒,是旁邊用戶的短時突波,雲端主機可以留。
規格沒變、流量也沒變,尖峰裡 steal 多次爬到大約 10% 以上,每次維持好幾分鐘,p95 同時抬高:CPU 是被長期拿走的。這時加 vCPU 常常沒用,核更多,在已經擠滿的宿主上只是多排一次。
另一種尖峰要分開。user 加 sys 接近打滿,steal 接近 0:算力是你自己用完的,先在雲端加大 CPU。加大之後 steal 仍在營業時段反覆出現,再把換裸機放上桌面。 10% 是讀圖用的線,不是告警規範。延遲預算更緊,線就畫低;批次工作可以等,線就畫高。要一起成立的是連續多個工作日,而且 p95 同向。
容器 VPS 沒有 st。到 CPU 控制器的 cpu.stat 讀 nr_throttled 和 throttled_usec。
尖峰裡節流時間持續增加,就是配額到了。配額已經加到這家 VPS 的上限,節流還在,就和 steal 用同一條判斷。
裸機的宿主系統上,steal 應停在 0 附近。你若再切自己的虛擬機,客戶機裡仍會出現 steal,那是這 32 核在你自己的虛擬機之間分。
記憶體:工作集頂到規格
工作集是這段時間反覆碰到、必須留在記憶體裡的頁。Linux 會把空閒記憶體拿去當快取。
MemAvailable 偏低、延遲卻穩,多半還在快取,繼續留在雲端。看到「記憶體使用率 90%」就換裸機,常常買到一塊用來裝快取的記憶體。
該記下的是這幾件一起出現。尖峰時 vmstat 的 si、so 持續不為 0。主要缺頁升高,資料庫延遲跟著走。核心日誌出現 OOM。
資料庫想要的緩衝池已經大於這臺雲端主機的記憶體上限,廠商規格表沒有更大一檔,或下一檔換成了你不能用的機型。
balloon 會讓客戶機在行程看起來還沒占滿時就感到壓力,因為宿主把頁收回去了。先確認壓力來自氣球還是工作集。
工作集大約 32GB、沒有 swap、沒有 OOM:在雲端加一檔記憶體即可。 工作集已經頂到這家雲賣給你的最大記憶體,才輪到裸機的兩檔。兩檔都是 DDR4-3200 ECC RDIMM,128GB 或 256GB。下單後不能加條。 按尖峰工作集,加上作業系統和頁面快取要留的餘裕來選。放不進 128GB,選 256GB,月租 $592。兩檔都放不下,這臺機器的記憶體上限也接不住。
硬碟:佇列拖住 commit
資料庫變慢時,先看資料碟的佇列,再看網卡。
iostat -xz 1 裡,aqu-sz 是平均佇列長度,w_await 是寫入等待。OLTP 在意提交時的 fsync。備份的循序讀速度說明不了下午的提交。
尖峰裡資料碟 aqu-sz 經常大於 1,w_await 走到幾十毫秒,慢日誌的 commit 一起變長:佇列已經在拖資料庫。這時吞吐可以仍然不高。
雲端的網路磁碟還會疊 IOPS 點數。點數用完,等待突然變長,過幾個小時又恢復。每天同一時段變慢、重啟應用也沒用,就是這條曲線。
IOPS 買到這家雲的最高檔,等待仍在工作日重複出現,限制在共用儲存上。
夜間備份把硬碟打滿、白天 w_await 正常:把備份挪到離峰。等待很低、慢查詢卻是鎖或全表掃描:先改 SQL。
NVMe 上 %util 接近 100,不要單獨當成飽和;佇列長度和寫入等待比較有用。換到裸機之後同樣用這兩欄。
可用記憶體低但延遲穩,先當快取。硬碟只在備份時忙,先挪備份。尖峰裡持續換頁、OOM,或佇列拖住 commit,才把那一條記成成立。
對照之後怎麼判
| 尖峰裡看到的 | 留在雲端 | 再算裸機 |
|---|---|---|
| steal 只跳幾秒,p95 不動 | 維持現有規格 | 這條不成立 |
| steal 多次到約 10% 並維持數分鐘,p95 同向;加 vCPU 後仍如此 | 加核已經試過 | CPU 被旁邊的用戶拿走 |
| user 加 sys 打滿,steal 接近 0 | 加大雲端 CPU | 先留著 |
| 容器節流在尖峰持續增加,配額已到頂 | 與 steal 同一結論 | 配額到頂後仍節流 |
| 可用記憶體低,無換頁,延遲穩 | 當作快取留下 | 這條不成立 |
| 尖峰持續換頁或 OOM,緩衝池大於雲端記憶體上限 | 雲端已無更大記憶體 | 按工作集選 128GB 或 256GB |
| 只有備份時段硬碟忙,白天寫入等待正常 | 挪開備份 | 這條不成立 |
| 資料碟佇列經常大於 1,寫入等待到幾十毫秒,commit 變慢,IOPS 已到頂 | 磁碟型號已經換過 | 佇列來自共用儲存 |
對上了也不必當天搬。延遲若主要來自用戶到機房的距離,裸機消掉 steal,消不掉那段往返。 實體機部署於日本東京。到日本及鄰近地區的路徑,和到更遠地區的路徑,要分開看。 應用鎖、缺索引、跨區呼叫,也不在這三條裡。
在現在這臺把數字抓下來
下面四步用的是你現在的雲端主機或 VPS。裸機還沒租的時候就能做完。指令只負責取樣。
-
1
尖峰取樣,蓋住五個工作日
每個尖峰跑
vmstat 1。留下us、sy、st、si、so。同一窗口匯出 p95。備份時段另存。 -
2
分開快取和工作集
讀
MemAvailable,對照資料庫緩衝池和尖峰實際占用。有 OOM 就留下核心日誌。容器再讀記憶體上限。 -
3
只記資料碟
跑
iostat -xz 1。記下資料碟的aqu-sz和w_await,並對照慢日誌的 commit。系統碟和備份碟分開。 -
4
收成三行
每行一條:有或沒有、落在哪些天、p95 是否同向。兩行「有」,再到設定頁比價。一行「有」,先在雲端改規格,下一週重測。
vmstat 1
iostat -xz 1
us 是使用者態,sy 是核心態,id 是閒置,wa 是等待磁碟,st 是 steal。si 和 so 是換入、換出。
容器另外記下 nr_throttled 的增量。缺這一欄,就不要給 CPU 下結論。
換到整臺之後,曲線該落到哪
兩條已經成立,接下來核的是裸機能不能接住。 CPU 是單路 AMD EPYC 7543P,32 核 / 64 執行緒,2.8–3.7 GHz。一個客戶使用這顆 CPU。 宿主系統裡,steal 應接近 0。你自己再切虛擬機時,客戶機裡的 steal 只反映這 32 核怎麼分。
記憶體兩檔:128GB 月租 $465,256GB 月租 $592,都是 DDR4-3200 ECC RDIMM。按尖峰工作集選。工作集清楚落在 128GB 以內,就選 128GB。
硬碟預設是 2 × 1TB NVMe,無硬體 RAID,碟獨立直連,可用容量按 2TB 理解。 佇列若來自網路磁碟,換到本機 NVMe 之後,寫入等待通常會先降下來。降不下來,再查 SQL,或看一顆碟是否不夠。 還可以加 0 到 2 顆 2TB,每顆月租 $83,同樣直連,不會自動併進陣列。要碟級冗餘就自己做軟 RAID,可用容量會回到大約 1TB。備份仍放到機外。
頻寬預設 250 Mbps,不限流量。硬碟佇列是儲存等待,先不要為了 fsync 把頻寬升到 1G(月加 $251)或 2G(月加 $749)。出口流量本身把 250M 打滿,再升頻寬。 預設含 1 個 IPv4。還要位址就按個加,每個月 $2,一臺合計最多 256 個,不按子網打包。 系統可以選 Ubuntu 24.04。要 Windows,再選 Standard,月加 $21,或 Datacenter,月加 $27。Linux 用 SSH,Windows 用 RDP。
月租等於機型價,加上加碟數乘 83、頻寬加價、額外 IP 個數乘 2、系統加價。 應付等於月租乘週期月數。月付、季付、半年付、年付都按這個乘。無安裝費。 實體機部署於日本東京。三條裡若只有硬碟佇列成立,CPU 和記憶體都安靜,仍先把雲端的碟型換到頂,再和 $465 起的月租比較。 工作集和佇列都輕的業務,留在雲端通常更合適。兩條對上,再打開設定頁選 128GB 或 256GB。