遇到效能問題別急著加硬體。善用 Linux 內建工具,能在幾分鐘內定位 CPU、記憶體、I/O、網路四大資源瓶頸。本文精選五大指令,附輸出欄位解讀與實戰判斷邏輯。
已於前文詳細解析,此處補充批次模式擷取快照:
top -b -n 1 | head -30 > /tmp/top_snapshot.txt
# 定時任務收集歷史趨勢
vmstat 2 10 # 每 2 秒取樣,共 10 次
vmstat -t # 顯示時間戳
vmstat -a # 顯示 active/inactive 記憶體
vmstat -d # 磁碟統計 (讀寫次數、扇區、延遲)
vmstat -p sda1 # 指定分區統計
| 區塊 | 欄位 | 異常徵兆與判斷 |
|---|---|---|
| Procs | r | 可執行佇列長度。持續 > CPU 核心數 → CPU 飽和 |
| b | 不可中斷睡眠 (通常等 IO)。持續 > 0 → IO 瓶頸 | |
| Memory | swpd | 已用 Swap。持續增長 → 記憶體不足 |
| Memory | free | 空閒記憶體。過低觸發 kswapd 頻繁回收 |
| Memory | buff/cache | 頁面快取。過高佔用可用記憶體 |
| Swap | si/so | Swap in/out (KB/s)。持續非零 → 嚴重缺記憶體 |
| IO | bi/bo | 塊裝置讀/寫 (塊/秒)。配合 iostat 細分 |
| System | in | 中斷數/秒。極高 → 硬體/驅動問題 |
| System | cs | 上下文切換/秒。極高 → 執行緒過多/鎖爭用 |
| CPU | us/sy/id/wa/st | wa 高 → IO 等待;sy 高 → 系統呼叫/鎖;st 高 → 虛擬機偷取 |
iostat -xmt 2 # -x 延伸統計 -m MB單位 -t 時間戳 每2秒
iostat -xmt 2 sda # 僅監控 sda
| 欄位 | 含義 | 健康閾值 |
|---|---|---|
| %util | 裝置頻寬利用率 (有請求處理的時間比) | < 70% (SSD 可更高) |
| await | 平均 I/O 等待時間 (ms) = 隊列等待 + 服務時間 | HDD < 20ms, SSD < 5ms |
| svctm | 平均服務時間 (ms) | 應遠小於 await |
| rrqm/s, wrqm/s | 合併請求率 | 高合併 = 循序存取佳 |
| r/s, w/s | 每秒讀/寫請求數 | 配合應用負載分析 |
| rMB/s, wMB/s | 吞吐量 (MB/s) | 接近裝置理論上限為瓶頸 |
# 安裝 sysstat 套件後,cron 自動收集 /var/log/sa/saDD
sar -u 1 10 # CPU 使用率
sar -r 1 10 # 記憶體使用率
sar -d 1 10 # 磁碟 I/O (需 -d 參數啟用收集)
sar -n DEV 1 10 # 網路介面統計
sar -q 1 10 # 執行佇列長度、負載平均
sar -B 1 10 # 分頁/換頁統計
sar -A # 所有報表
# 歷史查詢
sar -u -f /var/log/sa/sa01 # 查詢 1 號的 CPU 記錄
pidstat -u 1 5 # CPU 使用率 (每進程 usr/sys/guest)
pidstat -r 1 5 # 記憶體 (minflt/majflt/VSZ/RSS)
pidstat -d 1 5 # I/O (kB_rd/kB_wr/kB_ccwr)
pidstat -t 1 5 # 執行緒級統計
pidstat -p PID 1 5 # 指定進程
pidstat -C java 1 5 # 指定指令名模式
1. top / vmstat 1 5 → 確認 CPU/記憶體/IO 整體壓力
├─ CPU 高 (us/sy) → pidstat -u / perf top 定位熱點函式
├─ wa 高 / b > 0 → iostat -xmt 1 定位慢裝置 → pidstat -d 定位進程
├─ si/so 持續非零 → 記憶體不足 → pidstat -r 找大戶 → 擴容或優化
└─ cs 高 / in 高 → 執行緒/中斷風暴 → pidstat -t / /proc/interrupts
2. sar -u -r -d -q -f /var/log/sa/saDD → 回顧歷史趨勢,判斷偶發/週期性
3. 針對性調優:JVM 參數、資料庫索引、連線池、Nginx worker、磁碟調度器、NUMA 綁定
五大指令各有分工:top 看進程、vmstat 看系統總覽、iostat 看磁碟細節、sar 看歷史趨勢、pidstat 看進程細分。組合使用,無硬體升級也能榨乾效能。