效能調優的第一步是「看懂數據」。Linux 提供豐富的監控工具箱,各有側重:CPU 視角(mpstat、sar)、記憶體/換頁/上下文切換(vmstat)、磁碟 I/O(iostat)、進程級熱點(top/htop)、系統整體負載(uptime/w)。本文系統解析六大工具的關鍵指標、輸出判讀邏輯、常用參數與實戰排查案例,助你建立從指標到根因的完整診斷鏈路。
| 指標 | 含義 | 健康基線 | 主要工具 |
|---|---|---|---|
%user | 用戶態 CPU 佔用 | < 70% | mpstat, vmstat, sar, top |
%sys | 核心態 CPU 佔用 | < 30% | 同上 |
%iowait/wa | 等待 I/O 導致 CPU 空閒 | < 5-10% | 同上 |
%idle/id | CPU 完全空閒 | > 20% | 同上 |
%steal | 虛擬化環境被宿主機佔用 | = 0% | mpstat, sar |
r (run queue) | 等待 CPU 的進程數 | < CPU 核心數 | vmstat |
in (interrupts/s) | 每秒中斷次數 | 視硬體而定 | vmstat, mpstat |
cs (context switch/s) | 每秒上下文切換次數 | < 5000-10000 | vmstat |
si/so | 每秒換入/換出頁數 | = 0 (持續非零=記憶體不足) | vmstat |
bi/bo | 每秒塊裝置讀/寫塊數 | 視負載而定 | vmstat, iostat |
%util | 裝置忙碌百分比 | < 70-80% | iostat |
await | 平均 I/O 等待時間 (ms) | < 10-20ms (SSD), < 50ms (HDD) | iostat |
svctm | 平均 I/O 服務時間 (ms) | < await | iostat |
| load average | 1/5/15 分鐘可運行進程平均數 | < CPU 核心數 | uptime, top, w |
mpstat -P ALL 5
# 輸出含:CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle intr/s
%steal、軟中斷 %soft 暴增等現象。%iowait 持續高 → 磁碟瓶頸;%sys 高於 %user → 核心鎖競爭/系統調用過多;%steal > 5% → 宿主機超售或鄰居噪音。vmstat 3 10
# 輸出欄位:procs(r b) memory(swpd free buff cache) swap(si so) io(bi bo) system(in cs) cpu(us sy id wa st)
wa 包含在 id 中(舊版內核),新版分離顯示。sar -u 5 6 # CPU 使用率歷史
sar -r 5 6 # 記憶體使用率歷史
sar -d 5 6 # 磁碟 I/O 歷史 (需啟用 sadc)
sar -n DEV 5 6 # 網路介面統計歷史
sysstat 套件含 sadc 守護進程,預設每 10 分鐘寫入 /var/log/sa/saDD,支援事後追溯、生成日報/周報(sar -A -f /var/log/sa/sa01)。%idle 持續 < 10% → CPU 瓶頸;%idle 高但響應慢 → 等待記憶體分配(檢查 %steal、si/so)。iostat -xmt 1
# 關鍵欄位:rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
實戰公式:總 IOPS = r/s + w/s;平均等待 ≈ svctm × (1 + 2 + ... + 佇列深度) / 佇列深度。
top -d 3
# 頭部:系統時間、uptime、負載、任務統計、CPU 彙總、記憶體/Swap
# 進程表:PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
PR:優先權(數值越大 = 優先權越低,時間片越長)。NI:Nice 值(-20 最高,19 最低)。VIRT/RES/SHR:虛擬/常駐/共享記憶體 (KB)。S:R 運行、S 睡眠、D 不可中斷睡眠(通常卡 I/O)、Z 僵屍、T 停止/追蹤。1 顯示每核 CPU、M 按記憶體排序、P 按 CPU 排序、c 顯示完整命令列、k 殺進程。uptime
# 14:32:11 up 46 days, 8:02, 2 users, load average: 0.25, 0.37, 0.38
load > 核心數 × 0.7 需關注;> 核心數 明顯擁塞;> 核心數 × 2 嚴重過載。uptime 看負載 → 高則 top 找熱進程 → vmstat 1 看 r/cs/si/so → 定 CPU/記憶體/鎖/換頁。mpstat -P ALL 看單核/軟中斷/Steal → perf top 定函數熱點。iostat -x 1 看 %util/await/svctm → pidstat -d 1 或 iotop 定進程 → 檢查應用寫入模式/索引/RAID 卡快取策略。free -h/vmstat 看 si/so → top -o %MEM 找大戶 → 分析記憶體洩漏/快取佔用/巨型頁配置。sysstat(含 sadc)+ cron 10 分鐘採集,保留 30 天以上。node_exporter 暴露 cpu/mem/disk/net 全維度指標。load1 > cores*1.5、iowait > 20%、disk_util > 85%、mem_available < 10%、context_switches > 20000/s。熟練掌握這六大工具的指標語義、輸出判讀與聯動排查,你就擁有了「X 光眼」般的 Linux 效能診斷能力——從現象到根因,從單機到叢集,數據說話,調優有據。