天天看點

linux曆史問題排查神器-sar指令

作者:碼農世界

工作中總會碰到幾次要分析機器曆史問題的需求,之前沒有系統化的整理過,也沒有深入的去了解那些排查系統性能工具的名額輸出,導緻在遇上這種需求的時候,總是心虛,能搪塞過去就搪塞過去,不過随着工作年限的增加,遇到這種需求,再說不出個123來,就配不上工牌上那“進階運維工程師”幾個字了。這篇文章,就來拆解下這個linux曆史問題排查神器-sar指令 。

如果你的系統沒有安裝sysstat這個包,那麼是沒有sar指令的,也不會有可分析的檔案,需要執行指令yum -y install sysstat去安裝,安裝完成後,就有sar指令了。同時也會自動生成相關目錄及計劃任務/etc/cron.d/sysstat。

sar常用指令

假設你要全面的分析系統名額,又沒有足夠的耐心将這篇文章看完,想着現學現賣,那麼直接執行下面的指令,然後去看系統輸出的各項名額吧,看不懂的,就來這個頁面搜尋下名額名稱,就可以找到對應的解釋,如果文章中沒有解釋,那就需要去文章開頭附的參考資料中尋找答案了。

萬能的sar指令如下:

# 輸出26日的20:00:01到23:00:01之間的所有報告
$ sar -f sa26 -A -s 20:00:01 -e 23:00:01 | less

# 每隔3s列印下目前系統的所有性能名額并輸出到/tmp/sar_3.log檔案中
$ sar -A 3 >> /tmp/sar_3.log           

各選項如下:

-f:指定要分析的檔案sa檔案,預設保留近三十天的,檔案名格式:sa[日期],如1号的就是sa1,15号的就是sa15,不過建議使用stat指令查一下檔案最近改動時間,比如sa15,查出來的可能是上個月15号的日志,等到這個月16号,再看sa15這個檔案,那麼檔案最近改動時間,就是當月的15号了,上月的已經被删除了。在分析之前,一定要先确認自己分析的檔案沒錯哦,别分析了半天,看的不是你想看的那天的,那就尴尬了。

-A:輸出全部的性能名額,包括磁盤、系統平均負載、記憶體、網卡流量等等,如果想單獨輸出某方面的名額,需要加其他選項,這個後面細說。

-s:指定要輸出的報告起始時間,上面的指令是輸出20:00:01之後的。

-e:指定要輸出的報告截止時間,上面的指令是輸出23:00:01之前的。

-u:輸出CPU使用情況的統計資訊

-v:輸出inode、檔案和其他核心表的統計資訊

-d:輸出每一個塊裝置的活動資訊

-r:輸出記憶體和交換空間的統計資訊

-b:顯示I/O和傳送速率的統計資訊

-a:檔案讀寫情況

-c:輸出程序統計資訊,每秒建立的程序數

-R:輸出記憶體頁面的統計資訊

-y:終端裝置活動情況

-w:輸出系統交換活動資訊

CPU相關名額

# 輸出26号,20:00:00到22:00:00,CPU相關的名額(-P ALL:輸出每個核心的詳細名額資訊)

$ sar -f sa26 -u -P ALL -u ALL -s 20:00:00 -e 22:00:00           

輸出的各項名額含義如下:

  • CPU:表示目前是哪個CPU,all表示所有cpu的名額平均值。
  • %usr:CPU在使用者模式下,執行程序的時間百分比 。
  • %nice:CPU處在帶NICE值的使用者模式下的時間百分比。
  • %system: CPU處在系統模式(核心态)下,執行程序的時間百分比。
  • %iowait:CPU用于等待I/O操作完成(等待輸入輸出完成),占用CPU總時間的百分比,如果此值過高,表示硬碟存在I/O瓶頸 。
  • %steal:管理程式為另一個虛拟程序提供服務而等待虛拟CPU的百分比。
  • %irq:CPU服務硬體中斷(簡稱硬中斷)所花費的時間百分比。
  • %soft:CPU服務軟體中斷(簡稱軟中斷)所花費的時間百分比。
  • %guest:CPU運作虛拟處理器所花費的時間百分比。
  • %gnice:Percentage of time spent by the CPU or CPUs to run a niced guest.
  • %idle:CPU空閑時間百分比,如果此值過高,表示CPU較空閑。如果此值高但系統響應慢時,有可能是 CPU 等待配置設定記憶體,此時應檢視記憶體使用,必要時需要加大記憶體容量 ,如果此值持續低于10,則系統的 CPU 處理能力相對較低,表明系統中最需要解決的資源是 CPU。

任務建立和系統切換活動相關

# 輸出26号,20:00:00到22:00:00,任務建立和系統切換活動相關名額
$ sar -f sa26 -w -s 20:00:00 -e 22:00:00           

各項名額解釋如下:

proc/s:每秒建立的總任務數

cswch/s:每秒上下文切換的總數。

系統負載相關

# 輸出26号,20:00:00到22:00:00,程序隊列長度和平均負載狀态的名額
$ sar -f sa26 -q -s 20:00:00 -e 22:00:00           

輸出的各項名額含義如下:

runq-sz :運作隊列的長度,等待運作的程序數量

plist-sz:程序清單中程序和線程的數量

ldavg-1 :最後1分鐘的系統平均負載

ldavg-5 :過去5分鐘的系統平均負載

ldavg-15:過去15分鐘的系統平均負載

blocked:目前阻塞的等待I/O完成的任務數。

記憶體統計資訊相關

# 輸出26号,20:00:00到22:00:00,記憶體統計資訊相關的名額
$ sar -f sa26 -R -s 20:00:00 -e 22:00:00           
輸出的各項名額含義如下:

frmpg/s:系統每秒釋放的記憶體頁數。負數表示系統配置設定的頁面數。注意,根據機器的體系結構,頁面的大小為4 kB或8 kB。
bufpg/s:每秒系統用作緩沖區的額外記憶體頁數。負值意味着系統使用更少的頁作為緩沖區。
campg/s:系統每秒緩存的額外記憶體頁數。負值意味着緩存中的頁面更少。           

記憶體和交換空間相關

# 輸出26号,20:00:00到22:00:00,記憶體和交換空間相關的名額
$ sar -f sa26 -r -u ALL -s 20:00:00 -e 22:00:00           

輸出的各項名額含義如下:

kbmemfree:空閑的記憶體數量(機關為KB),這個值和free指令中的free值基本一緻,不包括buffer和cache的空間。

kbmemused:已使用的記憶體數量,不包含核心使用的記憶體(機關為KB)。這個值和free指令中的used值基本一緻,是以它包括buffer和cache的空間。

%memused:已使用記憶體的百分數。實體記憶體使用率,這個值是kbmemused和記憶體總量(不包括swap)的一個百分比。

kbbuffers:核心緩沖區buffer,使用的記憶體數量(機關為KB)。這個值就是free指令中的buffer。

kbcached:核心高速緩存cache資料使用的記憶體數量(機關為KB)。這個值就是free指令中的cache。

kbcommit:保證目前系統所需要的記憶體,即為了確定不溢出而需要的記憶體(RAM+swap)。

%commit:這個值是kbcommit與記憶體總量(包括swap)的一個百分比。

kbactive:以KB為機關的活動記憶體數量(最近使用的記憶體,除非絕對必要,通常不會回收)。

kbinact:非活動記憶體的數量(以KB為機關)(最近使用較少的記憶體)。

kbdirty:等待“寫回磁盤”的以KB為機關的記憶體量。

系統交換活動相關資訊

# 輸出26号,20:00:00到22:00:00,系統交換活動相關的名額
$ sar -f sa26 -W -s 20:00:00 -e 22:00:00           
輸出的各項名額含義如下:

pswpin/s:每秒系統換入的交換頁面(swap page)數量
pswpout/s:每秒系統換出的交換頁面(swap page)數量           

記憶體分頁相關

# 輸出26号,20:00:00到22:00:00,記憶體和交換空間相關的名額
$ sar -f sa26 -B -s 20:00:00 -e 22:00:00           

輸出的各項名額含義如下:

pgpgin/s:每秒從磁盤空間或交換空間置換到記憶體的位元組數(機關為KB)。

pgpgout/s:每秒從記憶體置換到磁盤空間或交換空間的位元組數(機關為KB)。

fault/s:每秒鐘系統産生的缺頁數(主缺頁加次缺頁)。

majflt/s:每秒鐘産生的主缺頁數。

pgfree/s:每秒被放入空閑隊列中的頁個數。

pgscank/s:每秒被kswapd掃描的頁個數。

pgscand/s:每秒直接被掃描的頁個數。

pgsteal/s:每秒鐘從cache中被清除來滿足記憶體需要的頁個數。

%vmeff:每秒清除的頁占總掃描頁的百分比。

網絡裝置統計相關

# 輸出26号,20:00:00到22:00:00,eth0這塊網卡的網絡裝置統計相關的名額
# 省略egrep的話,輸出所有網卡,也可以egrep中填入多塊網卡名稱,| 分隔即可
$ sar -f sa26 -n DEV -s 20:00:00 -e 22:00:00 | egrep 'eth0|IFACE'           

輸出的各項名額含義如下:

IFACE:網絡裝置名。

rxpck/s:每秒接收的包數量。

txpck/s:每秒傳輸的包數量。

rxbyt/s:每秒接收的位元組數(機關為byte)。

txbyt/s:每秒傳輸的位元組數(機關為byte)。

rxkB/s:每秒收的資料量(機關為kB)。

txkB/s:每秒發的資料量(機關為kB)。

rxcmp/s:每秒接收壓縮包的數量。

txcmp/s:每秒傳輸壓縮包的數量。

rxmcst/s:每秒接收的多點傳播(multicast)包的總數排查網絡裝置故障。

網絡裝置故障相關

# 輸出26号,20:00:00到22:00:00,eth0這塊網卡的故障相關的名額(省略egrep的話,輸出所有網卡,也可以egrep中填入多塊網卡名稱,| 分隔即可)
$ sar -f sa26 -n EDEV -s 20:00:00 -e 22:00:00 | egrep 'eth0|IFACE'           

輸出的各項名額含義如下:

IFACE:網絡裝置名。

rxerr/s:每秒接收的壞包數量。

txerr/s:傳輸包時每秒發生錯誤的數量。

coll/s:傳輸包時每秒發生沖突的數量。

rxdrop/s:接收包時,每秒丢棄的包的數量(缺乏緩存導緻)。

txdrop/s:傳輸包時,每秒丢棄的包的數量(缺乏緩存導緻)。

txcarr/s:傳輸包時,每秒發生的傳輸錯誤的數量。

rxfram/s:接收包時,每秒發生幀校驗錯誤的數量。

rxfifo/s:接收包時,每秒鐘緩沖區溢出錯誤的數量。

txfifo/s:傳輸包時,每秒鐘緩沖區溢出錯誤的數量。

I/O和傳送速率

# 輸出26号,20:00:00到22:00:00,機器上所有I/O和傳送速率相關名額
$ sar -f sa26 -b -s 20:00:00 -e 22:00:00           

輸出的各項名額含義如下:

tps:每每秒向磁盤裝置請求資料的次數,包括讀、寫請求,其為rtps與wtps的和。每一次IO下發後會先将多個請求合并為一個I/O磁盤請求,這裡tps指請求合并後的請求計數

rtps:每秒向磁盤裝置的讀請求次數

wtps:每秒向磁盤裝置的寫請求次數

bread/s:每秒鐘從實體裝置讀入的資料量,機關為 塊/s

bwrtn/s:每秒鐘向實體裝置寫入的資料量,機關為 塊/s

磁盤相關

# 輸出26号,20:00:00到22:00:00,機器上所有磁盤的使用相關名額

$ sar -f sa26 -d -p -s 20:00:00 -e 22:00:00

# -p:列印裝置的名字。此選項與選項-d一起使用。預設不加-p的話情況下,名稱列印為dev m-n,

# 其中m和n為裝置的主号碼和副号碼。使用-p選項将顯示裝置名,易讀性更高。

# 裝置的主号碼和副号碼可以通過lsblk指令(輸出的MAJ:MIN列,就是主号碼和副号碼)檢視。

輸出的各項名額含義如下:

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:系統處理每次請求的平均時間,不包括在請求隊列中消耗的時間。man手冊中提示該字段将在将來的sysstat版本中删除。不要相信這個名額了。

%util:I/O請求占CPU的百分比。man手冊解釋:Percentage of elapsed time during which I/O requests were issued to the device (bandwidth utilization for the device). Device saturation occurs when this value is close to 100%.

繼續閱讀