System Activity Reporter

Posted by Adam on August 24, 2022
**`sar`(System Activity Reporter)** 是 Linux 系統中極為強大且輕量的效能監測工具,屬於 `sysstat` 軟體套件的一部分。 它與 `top` 或 `htop` 等即時監控工具最大的不同在於:**`sar` 具備「歷史紀錄」與「累積統計」的能力**。它可以在背景默默收集 CPU、記憶體、磁碟 I/O、網路流量等各種系統資源的使用率,並將資料保存下來,方便系統管理者排查過去發生的效能瓶頸(例如:排查昨天半夜系統突然變慢的原因)。 --- ## `sar` 的常見用法指南 `sar` 的指令結構通常為:`sar [選項] [間隔秒數] [收集次數]` ### 1. 即時監測(現在開始測) 若要觀察**當下**系統的資源變化,可以在指令後面加上「間隔秒數」與「次數」: * **監測 CPU 使用率(每 2 秒一次,共 5 次):** ```bash sar -u 2 5 ``` *(輸出結尾會自動計算 `Average` 平均值)* * **監測記憶體使用率(每 3 秒一次,共 10 次):** ```bash sar -r 3 10 ``` * **監測磁碟 I/O 讀寫狀況(每 2 秒一次,共 5 次):** ```bash sar -b 2 5 ``` * **監測網路流量(每 2 秒一次,共 3 次):** ```bash sar -n DEV 2 3 ``` --- ### 2. 查看歷史紀錄(排查過去發生的問題) 當 `sysstat` 背景服務啟用後,系統預設會自動記錄資料(通常存於 `/var/log/sysstat/saDD`)。你可以隨時調閱今天的歷史資料: * **調閱今天「全天」的 CPU 變化歷史:** ```bash sar -u ``` * **調閱今天「全天」的記憶體變化歷史:** ```bash sar -r ``` * **只看特定時間區間(例如今天 14:00 到 15:00):** ```bash sar -u -s 14:00:00 -e 15:00:00 ``` * **查看「昨天」或「過去特定日期」的紀錄:** ```bash # 查看昨天的紀錄 sar -u -f /var/log/sysstat/sa$(date -d "yesterday" +%d) # 查看這個月 5 號的紀錄(sa05 代表 5 號) sar -r -f /var/log/sysstat/sa05 ``` --- ### 3. 將資料持續寫入檔案與分析 如果你想在執行某個大型程式時,將全程的系統表現記錄下來: * **持續收集全系統數據並寫入二進位檔:** ```bash sar -o system_data.dat 5 ``` *(按 `Ctrl + C` 結束監測,數據會存於 `system_data.dat`)* * **讀取剛才保存的二進位檔案:** ```bash # 讀取該檔案中的 CPU 狀況 sar -u -f system_data.dat # 讀取該檔案中的記憶體狀況 sar -r -f system_data.dat ``` --- ## 常用選項速查表 | 選項 | 監測項目 | 關鍵欄位說明 | | --- | --- | --- | | **`-u`** | **CPU 使用率** | `%user`(使用者程序)、`%system`(核心程序)、`%iowait`(等待磁碟 I/O 的 CPU 比例)、`%idle`(空閒率) | | **`-r`** | **記憶體使用率** | `kbmemfree`(剩餘記憶體)、`kbmemused`(已用記憶體)、`%memused`(使用率)、`kbbuffers/kbcached` | | **`-S`** | **Swap 交換空間** | `kbswpfree`(剩餘 Swap)、`kbswpused`(已用 Swap)、`%swpused` | | **`-b`** | **磁碟 I/O 總量** | `tps`(每秒傳輸次數/IOPS)、`rtps`(每秒讀取)、`wtps`(每秒寫入) | | **`-q`** | **系統負載 (Load)** | `runq-sz`(等待執行的工作數)、`plist-sz`(程序總數)、`ldavg-1/5/15`(1, 5, 15 分鐘平均 Load) | | **`-n DEV`** | **網路介面流量** | `rxpck/s`(接收封包數)、`txpck/s`(發送封包數)、`rxkB/s`(接收 KB數)、`txkB/s`(發送 KB數) | | **`-A`** | **所有資源** | 顯示 CPU、Memory、I/O、Network 等全部報告 |