Nagios 監控觸發「WARNING - load average: 9.73, 10.67, 10.49」,CPU 負載遠超核心數,但 `top` 顯示 CPU 使用率可能不高。理解 Load Average(負載) 與 CPU Utilization(使用率) 的本質區別,才能精準定位效能瓶頸。
三個數值的含義
load average: 9.73, 10.67, 10.49
- 9.73:過去 1 分鐘 平均可執行程序數(正在執行 + 等待 CPU 的進程/執行緒)。
- 10.67:過去 5 分鐘 平均可執行程序數。
- 10.49:過去 15 分鐘 平均可執行程序數(最重要趨勢指標)。
判斷準則:負載值長期超過 CPU 邏輯核心數(如 8 核心負載 > 8)表示系統過載,排隊嚴重,響應延遲上升。
Load vs Usage 核心差異
| 維度 | CPU Load (負載) | CPU Usage (使用率) |
| 定義 | 任務佇列長度:執行中 + 就緒等待的進程/執行緒數 | CPU 執行非閒置指令的時間佔比 |
| 受 I/O 等待影響 | 是:磁碟/網路 I/O 阻塞進程計入負載 | 否:I/O 等待不計入使用率(iowait 單獨統計) |
| 反映內容 | 系統擁擠程度、排隊壓力 | CPU 計算資源實際消耗 |
| 典型場景 | 大量並發進程、磁碟狂讀寫、網路風暴、鎖競爭 | 計算密集型任務(編碼、編譯、科學計算) |
實戰排查高負載(以 Nagios 告警為例)
- 確認核心數: `nproc` 或 `lscpu`。假設 8 核心,負載 10+ 明顯過載。
- top 指令分析:
- 按 1 展開每核心使用率。
- 按 Shift+P 依 CPU 使用率排序。
- 觀察
%us (user)、%sy (system)、%wa (iowait)、%hi/%si (中斷)。
- 高 %wa (iowait) → 磁碟/網路 I/O 瓶頸:
- `iostat -x 1` 觀察裝置 %util、await、svctm。
- `iotop` 定位高 I/O 進程。
- 檢查:大量日誌寫入、資料庫 checkpoint、備份任務、Swap 活躍。
- 高 %sy (system) → 系統呼叫/鎖競爭:
- `perf top` 或 `strace -p PID` 分析系統呼叫熱點。
- 常見:大量 context switch、futex 鎖、頁面錯誤處理。
- 大量睡眠/等待進程 (D 狀態) → 負載高但 CPU 低:
- `ps aux | awk '$8 ~ /D/ {print}'` 找出不可中斷睡眠進程。
- 通常為 NFS 掛載掛掉、磁碟故障、驅動 Bug。
常用查看負載工具
uptime / w / cat /proc/loadavg:快速查看三值。
top / htop / glances:互動式完整視圖。
sar -q 1 10 (sysstat):歷史負載趨勢分析。
告警閾值建議
- Warning: Load > 核心數 × 0.7 (持續 5 分鐘)
- Critical: Load > 核心數 × 1.0 (持續 15 分鐘)
- 結合 CPU 使用率、I/O 等待、記憶體使用率多維度告警,避免誤報。
Load 反映「有多少事要做」,Usage 反映「CPU 忙不忙」。高 Load 低 Usage = 大量 I/O 等待或鎖競爭,治標必治本:優化 I/O、減少鎖粒度、拆分服務、擴容。