Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux 效能分析核心指令實戰:top、vmstat、pidstat、gprof、powertop 深度解析

編輯:Linux 系統常見問題解答

效能分析四大維度

維度核心指標代表工具
CPU 使用率us/sy/ni/id/wa/hi/si/sttop, vmstat, mpstat, pidstat
上下文切換cs (context switches)vmstat, pidstat -w
進程/執行緒行為CPU 親和性、遷移、鎖競爭top -H, pidstat, perf
程式碼熱點函數耗時、呼叫次數gprof, perf, valgrind

1. top - 即時互動式監控

啟動參數

top -d 1           # 1秒刷新
top -p 1234,5678   # 監控指定 PID
top -u nginx       # 監控指定用戶
top -b -n 1        # 批次模式輸出一次(適合腳本)

關鍵操作熱鍵

鍵功能
1顯示/隱藏各 CPU 核心使用率(核心功能)
H切換執行緒模式
f進入欄位管理
j在欄位管理中選擇 P (Last used CPU)
Space確認欄位選擇
P按 CPU 使用率排序
M按記憶體排序
c顯示完整命令行

實戰:找出佔用特定 CPU 核心的進程

# 1. 啟動 top -d 1
# 2. 按 1 顯示所有核心
# 3. 按 f → j → Space 顯示 P 欄(Last used CPU)
# 4. 觀察 P 欄數值,對應核心編號

# 批次模式腳本抓取
top -b -n 1 | awk 'NR>7 {print $1,$9,$10,$12}' | sort -k2 -nr | head -20

2. vmstat - 系統級虛擬記憶體統計

vmstat 2 10      # 每2秒採樣,共10次
vmstat -t        # 顯示時間戳
vmstat -s        # 顯示統計摘要(記憶體、分頁、中斷、CPU)

關鍵欄位解讀

欄位含義異常判讀
r可運行進程數(等待 CPU)持續 > CPU核心數 表示 CPU 壓力大
b不可中斷睡眠進程(通常是 I/O 等待)持續 > 0 表示 I/O 瓶頸
swpd已使用 swap 容量 (KB)持續增長表示記憶體不足
free空閒記憶體 (KB)過低觸發 OOM 風險
si/soswap in/out 速率 (KB/s)持續非零表示頻繁換頁
bi/bo磁塊裝置讀/寫 (KB/s)高數值表示磁碟 I/O 繁忙
in中斷次數/秒極高值可能為硬體/驅動問題
cs上下文切換次數/秒> 10,000 可能有鎖競爭或執行緒過多
us用戶態 CPU %應用程式計算密集
sy系統態 CPU %系統呼叫、中斷處理密集
id空閒 CPU %低值表示 CPU 忙碌
waI/O 等待 CPU %高值表示存儲瓶頸
st虛擬機偷取 CPU %雲環境關鍵指標

3. pidstat - 進程級精準監控

安裝

# Debian/Ubuntu
sudo apt-get install sysstat

# RHEL/CentOS
sudo yum install sysstat

# 啟用數據收集
sudo systemctl enable --now sysstat

核心用法

上下文切換欄位深度解讀

欄位全稱含義異常判讀
cswch/sVoluntary Context Switches主動放棄 CPU(等待鎖、I/O、睡眠)高值 = 鎖競爭、同步等待、I/O 瓶頸
nvcswch/sNon-Voluntary Context Switches被動被搶佔(時間片用完、高優先級搶佔)高值 = CPU 爭用、優先級反轉、執行緒過多

實戰:診斷高上下文切換

 1000 {print}'

# 3. 定位執行緒
pidstat -wt -p  1

# 4. 檢查鎖競爭(需 perf)
perf record -g -p  -- sleep 30
perf report

4. gprof - 程式碼級性能剖析

適用場景

  • C/C++/Fortran 程式編譯階段插桩
  • 需重新編譯加入 -pg 標誌
  • 適合 CPU 密集型計算熱點分析

完整流程

 analysis.txt

# 4. 關鍵報告解讀
# Flat profile: 函數自佔時間排序
# Call graph: 呼叫關係樹與累積時間

報告關鍵欄位

欄位含義
% time該函數佔總運行時間百分比
cumulative seconds累積時間
self seconds函數本身耗時(不含子呼叫)
calls呼叫次數
self ms/call平均單次耗時
total ms/call含子呼叫平均耗時

5. powertop - Intel 功耗與 CPU 行為分析

sudo powertop
# Tab 切換:Overview / Idle stats / Frequency stats / Device stats / Tunables
# 關鍵觀察:
# - CPU 核心 C-state 佔比(深度睡眠比例)
# - Wakeups/秒(喚醒頻率,越低越省電)
# - Tunables 建議優化項(按 Enter 套用)

綜合診斷流程圖

系統變慢
    │
    ├─► top -d 1 → 按 1 → 觀察各核心 us/sy/wa
    │       │
    │       ├─ us 高 → pidstat -p PID → 定位熱點函數 → gprof/perf 分析
    │       ├─ sy 高 → 檢查系統呼叫 (strace) / 中斷 (vmstat in)
    │       └─ wa 高 → iostat -x 1 / pidstat -d → 定位磁碟 I/O 進程
    │
    ├─► vmstat 1 5 → 觀察 r, cs, si/so, bi/bo
    │       │
    │       ├─ r > 核心數 → CPU 飽和
    │       ├─ cs > 10k → pidstat -w 定位進程 → 檢查鎖/執行緒設計
    │       ├─ si/so 持續非零 → 記憶體不足 → free -h / 擴容或優化
    │       └─ bi/bo 高 → 磁碟 I/O 瓶頸 → iotop / 優化索引/快取
    │
    └─► 綜合報告 → 優化代碼/架構/參數 → 壓測驗證 → 持續監控

工具選型速查表

需求首選工具備選工具
即時系統總覽top / htopglances, btop
歷史趨勢記錄sysstat (sar)Prometheus+Grafana, Netdata
進程級 CPU/記憶體/I/Opidstattop -p, ps, /proc/PID/stat
上下文切換分析pidstat -wvmstat, perf sched
函數級熱點(需重編譯)gprofperf, valgrind/callgrind
生產環境無損剖析perfeBPF (bpftrace), async-profiler
功耗/待機優化powertopturbostat, intel_gpu_top

總結

Linux 效能分析工具鏈成熟豐富,核心心法是由宏觀到微觀、由現象到本質:
1. top/vmstat 建立系統級基線
2. pidstat 定位異常進程與執行緒
3. pidstat -w 深入上下文切換根因
4. gprof/perf 穿透到程式碼熱點
5. 持續監控 + 壓測驗證 閉環優化

掌握這五大工具的核心參數與組合拳,即可解決 90% 以上的 CPU 效能疑難雜症。建議建立標準化診斷腳本(如 perf_check.sh),將專家經驗固化為自動化流程。

Copyright © Windows教程網 All Rights Reserved