處理器顯示百分之百:讀數字之前要先問的問題
三個不同的數字頂著同一個名字:開機以來的平均值、累計總量,以及兩次取樣之間的差值。只有最後一個能回答此刻的情況。
AtlasPVE ·
本條目涵蓋以下問題
- proxmox cpu 使用率很高
- proxmox 哪個處理程序在吃 cpu
- load average 是什麼
- top 指令輸出怎麼看
- proxmox cpu 跑到 100%
在面板上一看,處理器使用率似乎很高。在採取任何行動之前,只有一個問題要問:這個數字描述的是哪一段時間?
因為有三個不同的數字頂著同一個名字,而這三個數字說的是不同的事。
同名的三個數字
開機以來的平均值。如果這台機器兩個月前忙了三天,那段忙碌至今仍留在這個平均值裡。它回答不了此刻的情況。
累計總量。它永遠不會下降。它說的是過去,不是今天。
兩次取樣之間的差值。進行兩次量測,讀取兩者之間的變化。只有這一個能回答此刻的情況。
經典陷阱
列出處理程序的標準工具,在第一個畫面上顯示的是開機以來的平均值。看著那第一個畫面就採取行動,介入的是過去而不是今天。
正確的做法是至少取樣兩次,並讀取第二次的結果。工具本身沒有錯,錯的是讀它的方式。
同樣的錯誤,到處都是同樣的形狀
在這個 wiki 裡,這個形狀已經出現過兩次。
談磁碟耗損時提過看的不是百分比,而是斜率:剩下百分之八十五,在一顆磁碟上代表十年,在另一顆磁碟上代表八個月。
談封包丟棄時提過看的不是總數,而是速率:去年有過一小時異常的機器,會被它的計數器一輩子貼上罪魁禍首的標籤。
談處理器時則是看的不是平均值,而是差值。三個不同的地方,同一種讀法錯誤。
這可以寫成一條通則:沒有標明時間範圍的數字不是量測。根據任何數字採取行動之前,先問它涵蓋的是哪一段時間。
處理器真的很高的時候
這時需要第二個區分:是某一台虛擬機器很忙,還是伺服器不夠用?
虛擬機器用滿分配給它的全部配額是正常的。如果給了它兩個核心,而它把這兩個核心用滿了,系統正完全依照設計在運作。
問題出在伺服器本身飽和的那一刻:客體開始得不到它們要求的資源,所有客體一起變慢。
還有一件常被混淆的事:負載不是處理器使用率。負載計算的是正在等待的東西,其中有些可能等的不是處理器,而是磁碟。負載很高而處理器閒置是有可能的,這表示該去別的地方找原因。
Atlas 的做法
Atlas 列出伺服器上最耗用處理器的處理程序時,刻意取樣兩次並讀取第二次的結果。
原因正是上面那個陷阱:第一次取樣帶著開機以來的平均值,顯示它會造成誤導。這個差別不是小細節;依第一次取樣排序的清單,會把幾個月前很忙的處理程序呈現為今天的元凶。
另一個小而誠實的細節:這次量測的結果會短暫保留,同時到達的請求會綁定到同一次量測。原因是:卡片開著的時候每隔幾秒就會重新整理,每次重新整理都啟動一次新的量測,會給伺服器帶來不必要的負載。
這與談溫度的那篇文章是同一個原則:負責監看的東西,不應該成為帶來成本的東西。
資料來源
Proxmox 官方文件。內容為英文,且在此主題上以官方文件為準。