前言
有的時候,我們要通過對系統的cpu負載等性能數值的查看,來判排查系統產生某種故障(經常死機或者運行速度突然變慢)的原因。但是,簡單的top,uptime,w等命令只可以查看當前的負載,而無法查看過去的某一時間段的cpu的負載情況。
下面就介紹一個用於性能分析的命令,其可以用於查看過去的某一時間段的cpu的負載情況(系統性能)。
更多使用實例,隨時更新。如急需使用方法(例如:查看某一時間段的cpu),請直接跳到第七節。
一、sar概念
sysstat是Linux 系統中的常用工具包,而sar 是 Linux中sysstat工具包中的用於監控Linux系統性能的工具之一。
sysstat 工具包中包含兩種類型的工具:即時查看工具(iostat、mpstat、sar);累計統計工具(sar)
因此sar命令,又叫做系統活動情況報告。不僅可以實時查看服務器的性能,還可以做累計統計。
二、sar可監控的范圍
文件的讀寫情況
系統調用的使用情況
磁盤I/O使用情況
CPU的使用統計
內存使用狀況
進程活動
IPC有關的活動
三、sar命令使用環境
sar命令使用格式:
sar + 命令行選項(可選) + 間隔時間(可選) + 次數(可選)
常用來判斷一個系統瓶頸問題
查詢CPU
可用 sar -u 和 sar -q 等來查看
查詢內存
可用 sar -B、sar -r 和 sar -W 等來查看
查詢io
可用 sar -b、sar -u 和 sar -d 等來查看
四、sar命令累計統計的實現過程
系統會通過調用 /usr/lib64/sa/ 中的三個工具(sa1 sa2 sadc)來實現,周期地記錄當時的系統性能的信息的功能。
-
sa1 :收集並將每天的系統性能的信息寫入一個二進制的文件中,它是sadc的前端程序
-
sa2 :收集每天的系統活躍的信息並寫入總結性的文件中,其作為 sar的前端程序
-
sadc :收集系統的動態數據的數據並寫入一個二進制的文件中,其作為 sar 工具的后端
五、sar的日志
sar是由有類似日志切割的功能的,它會依據/etc/cron.d/sysstat中的計划任務,將日志放入/var/log/sa/中
(其日志為二進制文件,不可使用more、less、vim工具查看,必須使用sar或sadf )。
可以根據需求修改該計划任務.
如要查看某一時間段的服務器的性能的其中一個方法就是:使用sar命令,查看當天的日志文件
sar -f /var/log/sa/sa15
[root@ lib64]# sar -f /var/log/sa/sa15
Linux 3.10.0-327.el7.x86_64 (ops-node7) 07/15/2018 _x86_64_ (24 CPU)
12:00:01 AM CPU %user %nice %system %iowait %steal %idle
12:10:01 AM all 1.35 0.00 0.85 0.12 0.00 97.67
12:20:01 AM all 1.32 0.00 0.86 0.11 0.00 97.71
12:30:02 AM all 1.37 0.00 0.87 0.11 0.00 97.65
12:40:01 AM all 1.32 0.00 0.91 0.11 0.00 97.66
12:50:01 AM all 1.35 0.00 0.89 0.11 0.00 97.65
01:00:01 AM all 1.36 0.00 0.87 0.11 0.00 97.66
01:10:01 AM all 1.36 0.00 0.85 0.11 0.00 97.68
01:20:01 AM all 1.35 0.00 0.89 0.10 0.00 97.66
01:30:01 AM all 1.32 0.00 0.89 0.11 0.00 97.68
01:40:01 AM all 1.29 0.00 0.95 0.11 0.00 97.65
01:50:01 AM all 1.35 0.00 0.88 0.12 0.00 97.64
02:00:01 AM all 1.34 0.00 0.88 0.11 0.00 97.68
02:10:01 AM all 1.33 0.00 0.90 0.11 0.00 97.65
02:20:01 AM all 1.36 0.00 0.87 0.12 0.00 97.65
02:30:01 AM all 1.35 0.00 0.85 0.12 0.00 97.68
02:40:01 AM all 1.41 0.00 0.92 0.12 0.00 97.56
02:50:01 AM all 1.57 0.00 0.95 0.13 0.00 97.35
03:00:01 AM all 4.21 0.00 0.81 0.16 0.00 94.81
03:10:01 AM all 2.50 0.00 0.87 0.13 0.00 96.50
03:20:01 AM all 1.37 0.00 0.87 0.12 0.00 97.65
03:30:01 AM all 1.36 0.00 0.95 0.13 0.00 97.56
03:40:01 AM all 1.48 0.00 0.97 0.24 0.00 97.30
03:50:01 AM all 1.35 0.01 0.91 0.13 0.00 97.60
04:00:01 AM all 1.39 0.00 0.95 0.19 0.00 97.47
04:10:01 AM all 1.36 0.00 0.99 0.13 0.00 97.52
注意:
sar查看性能或其日志時,使用的12/24小時制;日志的切割是昨天晚上12點到今天12點為一天;默認只保留一個月的日志
六、sar命令參數及輸出項詳解
【1】格式
用法:
sar + 選項 + 時間間隔(可選) + 次數 (可選)
interval: 取樣周期,單位是秒
count:取樣次數,默認值為 1
options:命令行選項
【2】常用選項
-A 所有報告的總和
-B 輸出內存頁面的統計信息
-b 輸出I/O和傳送速率的統計信息
-C 輸出進程統計信息及每秒創建的進程數
-d 輸出每一個塊設備的活動信息
-H 輸出交換空間利用率信息
-h 輸出幫助信息
-p 輸出友好設備名字,以方便查看,常與-d和-n參數結合使用
-q 輸出進程隊列長度和系統平均負載狀態統計信息
-R 輸出內存頁面的統計信息
-r 輸出內存和交換空間的統計信息
-S 輸出交換空間利用率信息
-t 讀取 /var/log/sa/下的某日志的數據時顯示其中記錄的原始時間
-u 輸出整體CPU使用情況的統計信息
-V 輸出版本信息
-v 輸出內核表狀況統計信息(inode、文件和其他內核表的統計信息)
-W 輸出系統交換的統計信息
-w 輸出任務創建與系統轉換統計信息
-y 輸出終端設備的活動信息
----------
-I 輸出指定中斷的統計信息,后方可加參數{...|SUM|ALL|XALL} ... 指定中斷號
SUM 指定輸出每秒接收到的中斷總數
ALL 指定輸出前16個中斷
XALL 指定輸出全部的中斷信息
----------
-P 輸出指定的部分的CPU的統計信息,后方可加參數{cpu|ALL} cpu 指定cpu
ALL 輸出單個和整體cpu的統計數據
----------
-n 輸出網絡設備(網卡)狀態統計信息,后方可加參數{DEV|EDEV|NFS|NFSD|SOCK|ALL} DEV 輸出網絡設備的統計信息
EDEV 輸出網絡設備的錯誤統計信息
NFS 輸出NFS客戶端的活動統計信息
NFSD 輸出NFS服務器的活動統計信息
SOCK 輸出網絡套接字的使用統計信息
ALL 輸出所有類型的網絡活動統計信息
----------
-f 從文件中讀取數據信息。一般讀取sar日志,也可讀取-o選項生成的文件,后方要加文件名
-o 將sar的輸出信息保存到文件中,后方要加文件名
-i 指定間隔時長,單位為秒
-s 指定輸出統計數據的起始時間(格式為hh:mm:ss;例如01:00:00)
-e 指定輸出統計數據的截至時間,通常與-S選項連用。無數值時默認為18:00:00(格式為hh:mm:ss;例如09:00:00)
【3】輸出項
<1>cpu的輸出
sar -u
%usr CPU在用戶模式下,執行進程的時間百分比
%nice CPU在用戶模式下,用於nice操作,所占用CPU總時間的百分比
%system CPU處在系統模式(內核態)下,執行進程的時間百分比
%iowait CPU用於等待I/O操作完成(等待輸入輸出完成),占用CPU總時間的百分比
%steal 管理程序為另一個虛擬進程提供服務而等待虛擬CPU的百分比
%idle CPU空閑時間百分比
注意:
如果%iowait的值過高,表示硬盤存在I/O瓶頸
如果%idle值高,表示CPU較空閑
如果%idle 的值高但系統響應慢時,有可能是 CPU 等待分配內存,此時應加大內存容量
如果%idle 的值持續低於10,則系統的 CPU 處理能力相對較低,表明系統中最需要解決的資源是 CPU
<2>I/O和傳送速率輸出
sar -b
tps 每每秒向磁盤設備請求數據的次數,包括讀、寫請求,其為rtps與wtps的和。每一次IO下發后會先將多個請求合並為一個I/O磁盤請求,這里tps指請求合並后的請求計數
rtps 每秒向磁盤設備的讀請求次數
wtps 每秒向磁盤設備的寫請求次數
bread/s 每秒鍾從物理設備讀入的數據量,單位為 塊/s
bwrtn/s 每秒鍾向物理設備寫入的數據量,單位為 塊/s
<3>設備使用情況輸出
sar -d
DEV 磁盤設備,加上用參數-p可以打印出sda等磁盤設備名稱;如不加參數-p,設備則顯示為dev253-0等
tps 每秒向磁盤設備請求數據的次數,包括讀、寫請求,其為rtps與wtps的和。每一次IO下發后會先將多個請求合並為一個I/O磁盤請求,這里tps指請求合並后的請求計數
rd_sec/s 每秒讀扇區的次數
wr_sec/s 每秒寫扇區的次數
avgrq-sz 平均每次設備I/O操作的數據大小(扇區)
avgqu-sz 磁盤請求隊列的平均長度
await 從請求磁盤到系統處理完,每次請求的平均消耗時間,包括請求隊列等待時間(單位是毫秒)
svctm 系統處理每次請求的平均時間,不包括在請求隊列中消耗的時間
%util I/O請求占CPU的百分比
<4>網絡設備統計信息輸出
sar -n EDEV
IFACE 網絡設備名
rxpck/s 每秒接收的包數量
txpck/s 每秒傳輸的包數量
rxbyt/s 每秒接收的字節數(單位為byte)
txbyt/s 每秒傳輸的字節數(單位為byte)
rxkB/s 每秒收的數據量(單位為kB)
txkB/s 每秒發的數據量(單位為kB)
rxcmp/s 每秒接收壓縮包的數量
txcmp/s 每秒傳輸壓縮包的數量
rxmcst/s 每秒接收的多播(multicast)包的總數排查網絡設備故障
<5>網絡設備故障信息輸出
EDEV |egrep ‘eth0|IFACE’ (本次指定了網卡etho0,可填入其他網卡)
IFACE 網絡設備名
rxerr/s 每秒接收的壞包數量
txerr/s 傳輸包時每秒發生錯誤的數量
coll/s 傳輸包時每秒發生沖突的數量
rxdrop/s 接收包時,每秒丟棄的包的數量(缺乏緩存導致)
txdrop/s 傳輸包時,每秒丟棄的包的數量(缺乏緩存導致)
txcarr/s 傳輸包時,每秒發生的傳輸錯誤的數量
rxfram/s 接收包時,每秒發生幀校驗錯誤的數量
rxfifo/s 接收包時,每秒鍾緩沖區溢出錯誤的數量
txfifo/s 傳輸包時,每秒鍾緩沖區溢出錯誤的數量
<6>內存分頁狀態輸出
sar -B
pgpgin/s 每秒從磁盤空間或交換空間置換到內存的字節數(單位為KB)
pgpgout/s 每秒從內存置換到磁盤空間或交換空間的字節數(單位為KB)
fault/s 每秒鍾系統產生的缺頁數(主缺頁加次缺頁)
majflt/s 每秒鍾產生的主缺頁數
pgfree/s 每秒被放入空閑隊列中的頁個數
pgscank/s 每秒被kswapd掃描的頁個數
pgscand/s 每秒直接被掃描的頁個數
pgsteal/s 每秒鍾從cache中被清除來滿足內存需要的頁個數
%vmeff 每秒清除的頁占總掃描頁的百分比
<7>進程隊列長度和平均負載狀態輸出
sar -q
runq-sz 運行隊列的長度,等待運行的進程數量
plist-sz 進程列表中進程和線程的數量
ldavg-1 最后1分鍾的系統平均負載
ldavg-5 過去5分鍾的系統平均負載
ldavg-15 過去15分鍾的系統平均負載
<8>內存和交換空間狀態輸出
sar -r
kbmemfree 空閑的內存數量(單位為KB)
kbmemused 已使用的內存數量,不包含內核使用的內存(單位為KB)
%memused 已使用內存的百分數
kbbuffers 內核緩沖區buffer,使用的內存數量(單位為KB)
kbcached 內核高速緩存cache數據使用的內存數量(單位為KB)
kbcommit 保證當前系統所需要的內存,即為了確保不溢出而需要的內存(RAM+swap)
%commit kbcommit與所有內存總量的百分比
<9>系統交換活動信息輸出
sar -W
pswpin/s 每秒系統換入的交換頁面數量
pswpout/s 每秒系統換出的交換頁面數量
七、sar使用實例
【1】查看某一時間段的情況
<1>查看凌晨1點到3點的cpu
sar -s 01:00:00 -e 03:00:00
<2>查看凌晨1點到3點的系統的平均負載
若要看某時間段其他性能,加上對應選項
sar -s 01:00:00 -e 03:00:00 -q
<3>查看本月3號的cpu
注意:
該操作需要去查看sar的日志(第五節已經介紹一次)
默認只保存一個月的
sar查看性能或其日志時,注意自己的使用的是12還是24小時制
日志的切割是昨天晚上12點到今天12點為一天
cd /var/log/sa/
sar -f sa03