uptime 與 vmstat:系統負載分析 文章首圖

uptime 與 vmstat:系統負載分析

前言

在 Linux 系統管理與效能調校的世界裡,「系統負載」是一個既抽象又具體的指標。當應用程式回應變慢、使用者抱怨頓卡時,第一時間我們需要知道:系統真的忙嗎?是 CPU 忙、記憶體不足,還是 I/O 瓶頸?

許多初學者容易將 uptime 顯示的 Load Average 直接等同於 CPU 使用率,這是一個常見的誤區。今天我們將深入探討兩個經典工具:uptimevmstat。前者提供系統的「瞬間健康報告」,後者則能揭示底層的資源競爭細節。掌握這兩者,你將能更精準地診斷系統瓶頸。

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

關鍵欄位解析

  1. procs 區段

    • r (runnable):等待 CPU 時間的進程數。若此值長期大於 CPU 核心數,表示 CPU 是瓶頸。
    • b (blocked):處於不可中斷睡眠狀態的進程數(通常等待 I/O)。若此值大於 0,可能表示磁碟 I/O 瓶頸。
  2. memory 區段

    • free:可用記憶體。
    • buffcache:用於緩衝和快取的記憶體。Linux 會盡量利用閒置記憶體作為 Cache 以加速檔案讀取,這是正常現象。
  3. swap 區段

    • si (swap in) 與 so (swap out):單位 KB/s。若這些數值長期不為 0,表示實體記憶體不足,系統頻繁使用硬碟作為虛擬記憶體,這會嚴重拖慢系統效能。
  4. 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 系統管理的專業度。