前言
在 Linux 系統管理與效能調校的世界裡,「系統負載」是一個既抽象又具體的指標。當應用程式回應變慢、使用者抱怨頓卡時,第一時間我們需要知道:系統真的忙嗎?是 CPU 忙、記憶體不足,還是 I/O 瓶頸?
許多初學者容易將 uptime 顯示的 Load Average 直接等同於 CPU 使用率,這是一個常見的誤區。今天我們將深入探討兩個經典工具:uptime 與 vmstat。前者提供系統的「瞬間健康報告」,後者則能揭示底層的資源競爭細節。掌握這兩者,你將能更精準地診斷系統瓶頸。
uptime:一眼看穿系統整體負載
uptime 指令非常簡單,它主要顯示系統已執行多久時間,以及過去 1、5、15 分鐘的平均負載(Load Average)。
核心概念:Load Average 是什麼?
Load Average 代表的是活躍進程數(Running or Uninterruptible Sleep Processes)。這意味著,如果一個進程正在等待磁碟 I/O,它也會被計入負載中。因此,高負載不一定代表 CPU 忙碌,也可能是因為磁碟 I/O 瓶頸導致大量進程處於 D 狀態(不可中斷睡眠)。
實際操作與解讀
在 Ubuntu 22.04 或 Debian 12 上執行以下指令:
uptime
典型輸出如下:
14:30:05 up 10 days, 3:22, 1 user, load average: 0.15, 0.08, 0.05
這裡的關鍵數據是 load average: 0.15, 0.08, 0.05:
- 0.15:過去 1 分鐘的平均負載。
- 0.08:過去 5 分鐘的平均負載。
- 0.05:過去 15 分鐘的平均負載。
如何判斷負載是否過高?
單純看數字是沒有意義的,必須結合 CPU 核心數。假設你的伺服器有 4 核心 CPU:
- 負載 < 核心數:系統運作平穩。
- 負載 ≈ 核心數:CPU 資源緊張,但尚能應付。
- 負載 > 核心數:系統過載,使用者可能會感到明顯的延遲。
在上面的範例中,若該伺服器為 4 核心,則 0.15 的負載顯示系統非常閒置。
vmstat:深入底層的資源透視鏡
雖然 uptime 告訴我們「負載是多少」,但 vmstat (Virtual Memory Statistics) 能告訴我們「為什麼會有這個負載」。它提供 CPU、記憶體、交換空間(Swap)、I/O 等關鍵指標的即時快照。
基礎用法
執行 vmstat 而不帶參數時,它會顯示自開機以來的平均統計數據。為了觀察即時變化,我們建議搭配延遲時間使用:
vmstat 1 5
這表示每 1 秒取樣一次,共取樣 5 次。輸出結果如下:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 2048000 12800 1024000 0 0 5 10 150 300 5 2 93 0 0
0 0 0 2047500 12800 1024000 0 0 0 0 145 290 3 1 96 0 0
1 0 0 2046000 12800 1024000 0 0 2 5 160 310 6 3 91 0 0
0 0 0 2045500 12800 1024000 0 0 0 0 140 285 2 1 97 0 0
1 0 0 2045000 12800 1024000 0 0 1 2 155 305 4 2 94 0 0
關鍵欄位解析
-
procs 區段:
r(runnable):等待 CPU 時間的進程數。若此值長期大於 CPU 核心數,表示 CPU 是瓶頸。b(blocked):處於不可中斷睡眠狀態的進程數(通常等待 I/O)。若此值大於 0,可能表示磁碟 I/O 瓶頸。
-
memory 區段:
free:可用記憶體。buff與cache:用於緩衝和快取的記憶體。Linux 會盡量利用閒置記憶體作為 Cache 以加速檔案讀取,這是正常現象。
-
swap 區段:
si(swap in) 與so(swap out):單位 KB/s。若這些數值長期不為 0,表示實體記憶體不足,系統頻繁使用硬碟作為虛擬記憶體,這會嚴重拖慢系統效能。
-
cpu 區段:
us(user):使用者空間進程佔用的 CPU 百分比。sy(system):核心空間進程佔用的 CPU 百分比。id(idle):閒置 CPU 百分比。wa(wait):等待 I/O 完成的 CPU 時間百分比。這是診斷 I/O 瓶頸的關鍵指標。若wa值過高(例如超過 20-30%),表示磁碟讀寫嚴重影響系統響應。
常見問題與疑難排解
Q1: Load Average 很高,但 CPU 使用率(top 指令)卻很低,這是怎麼回事?
這通常是 I/O 瓶頸 的典型特徵。如前所述,Load Average 包含等待 I/O 的進程。請檢查 vmstat 輸出中的 wa(I/O wait)欄位。如果 wa 很高,且 b(blocked processes)也呈現高值,代表磁碟讀寫速度無法滿足需求。此時應檢查磁碟健康狀態(SMART)、尋找大量小檔案讀寫,或考慮升級 SSD。
Q2: vmstat 顯示 Swap 使用量(swpd)很高,但 si/so 都是 0,這正常嗎?
這是正常的。Linux 記憶體管理策略會主動將不常使用的記憶體頁面移至 Swap,以釋放實體記憶體供檔案快取(Cache)使用。只要 si(swap in)和 so(swap out)的數值長期為 0 或極低,表示系統沒有因為記憶體不足而頻繁進行交換,效能不會受到影響。只有當 si/so 持續有顯著數值時,才需要擔心記憶體不足的問題。
小結
uptime 提供了系統負載的高層級概覽,適合快速檢查系統是否過載;而 vmstat 則提供了深入底層的細節,幫助我們區分是 CPU、記憶體還是 I/O 造成的瓶頸。
建議在日常監控中,將兩者結合使用:先用 uptime 確認負載趨勢,再用 vmstat 1 10 捕捉瞬間的資源爭用情況。透過這些基礎工具的正確解讀,你將能從「感覺系統慢」轉向「數據驅動的精準調校」,大幅提升 Linux 系統管理的專業度。