「CPU 使用率高」是效能調優最常見的起點,但單看一個數字遠不夠。需區分用戶態/系統態/等待I/O/軟中斷、觀察每核心負載、找出佔用 CPU 的進程/執行緒、判斷上下文切換與中斷風暴。本文系統整理四大核心指令,含參數詳解、輸出欄位解讀、實戰診斷流程。
top
# 進入後熱鍵:
1 # 切換顯示所有核心 CPU
H # 切換顯示執行緒
u # 篩選使用者
k # 殺死進程 (輸入 PID + signal)
r # 重設 nice 值
d # 修改更新間隔 (秒)
W # 寫入 ~/.toprc 保存設定
q # 離開
| 欄位 | 含義 |
|---|---|
%CPU | 進程佔用單核心百分比(多核心可超過 100%) |
%MEM | 記憶體佔用百分比 |
TIME+ | 累積 CPU 時間(百秒) |
S | 狀態:R=運行、S=睡眠、D=不可中斷睡眠、Z=殭屍、T=停止 |
NI | Nice 值(-20~19,越小優先級越高) |
%Cpu(s): 10.2 us, 2.1 sy, 0.0 ni, 86.5 id, 1.0 wa, 0.0 hi, 0.2 si, 0.0 st
us:用戶態(應用程式碼)sy:系統態(核心系統調用)ni:低優先級用戶態id:閒置wa:等待 I/O(高表示磁碟/網路瓶頸)hi:硬體中斷si:軟中斷(網路封包處理、timer 等)st:虛擬機被 hypervisor 偷走的時間vmstat 1 10 # 每1秒採樣10次
vmstat -a 1 # 顯示 active/inactive 記憶體
vmstat -t # 加上時間戳
----cpu----
us sy id wa st
| 欄位 | 含義 | 健康基準 |
|---|---|---|
us | 用戶態 % | 65-70% (滿載時) |
sy | 系統態 % | 30-35% (滿載時) |
id | 閒置 % | 0-5% (滿載時) |
wa | 等待 I/O % | < 5% (持續高則 I/O 瓶頸) |
st | Steal % (虛擬化) | < 1% (高則宿主機超賣) |
r 與上下文切換 csr > CPU 核心數 × 2-3 → CPU 壓力大cs > 50,000/秒 → 進程/執行緒切換頻繁,檢查鎖競爭、大量短命進程in(中斷)高 → 網卡/磁碟控制器中斷風暴mpstat -P ALL 1 # 所有核心 + 平均,每1秒
mpstat -P ALL 1 10 # 採樣10次
mpstat -I SUM 1 # 中斷統計摘要
mpstat -I CPU 1 # 每核心中斷分布
%usr 或 %sys 持續 100% → 單執行緒瓶頸(如未並行化計算、單執行緒資料庫查詢)。%irq/%soft 偏高於特定核心 → 中斷親和性 未平衡,可用 irqbalance 或手動 /proc/irq/N/smp_affinity 調整。%guest/%gnice → KVM/QEMU 客體 CPU 佔用。sysstat 套件 提供,比 top 更適合腳本化、歷史記錄。
pidstat 1 10 # 所有進程 CPU,每1秒10次
pidstat -u 1 10 # 明確指定 CPU 報告
pidstat -t 1 10 # 顯示執行緒級 (-t)
pidstat -p 1 10 # 只看指定 PID
pidstat -C 1 10 # 依命令名模式篩選
pidstat -h # 顯示時間戳
pidstat -r # 同時顯示記憶體/頁錯誤
UID PID %usr %system %guest %CPU CPU Command
1000 1234 15.2 2.1 0.0 17.3 2 java
%usr + %system = %CPU(單核心百分比)CPU:最後執行的核心編號-t 後會展開每個執行緒(TGID/TID),定位多執行緒應用熱點。sudo apt/dnf install dstat
dstat -c --top-cpu --top-mem 1 # CPU + 最高CPU進程 + 最高MEM進程
dstat -c -i -p 1 # CPU + 中斷 + 進程
dstat --cpu --proc-count 1 # CPU + 進程計數
vmstat 1 5 看 us/sy/wa/id、r、cs。wa 高 → iostat -xz 1 5 找磁碟瓶頸(非 CPU 問題)。sy 高 → mpstat -I CPU 1 看中斷分布;pidstat -t 1 找系統調用多的進程;strace -p PID 追蹤系統調用。us 高 → mpstat -P ALL 1 看是單核心還是多核心;pidstat -u 1 或 top -H 找熱點進程/執行緒;perf top 或 perf record -g 做函數級剖析。st 高 (虛擬機) → 宿主機 CPU 過度承諾,需調整 vCPU 配比或遷移實例。| 指標 | 健康範圍 | 警戒 |
|---|---|---|
運行佇列 r | < 核心數 × 2 | > 核心數 × 4 |
上下文切換 cs | < 20,000/s | > 50,000/s |
中斷 in | < 10,000/s | > 50,000/s |
CPU 等待 I/O wa | < 5% | > 20% |
Steal st | < 1% | > 5% |
掌握 top 互動觀察、vmstat 系統快照、mpstat 核心細節、pidstat 進程定位四大工具,配合 perf/bpftrace 深度剖析,即可從「CPU 跑滿」精準挖掘到「哪行代碼、哪個鎖、哪個系統調用」導致的瓶頸,實現數據驅動的效能優化。