一天一個 Linux 命令(38):sar 命令
本文為joshua317原創文章,轉載請註明:轉載自joshua317部落格https://www.joshua317.com/article/191
一、簡介
Linux下的sar(英文全稱:System Activity Reporter,系統活動情況報告)是系統執行狀態統計工具的命令,它將指定的作業系統狀態計數器顯示到標準輸出裝置。
sar工具將對系統當前的狀態進行取樣,然後通過計算資料和比例來表達系統的當前執行狀態。它的特點是可以連續對系統取樣,獲得大量的取樣資料。取樣資料和分析的結果都可以存入檔案,使用它時消耗的系統資源很小。
sar是目前 Linux上最為全面的系統性能分析工具之一,可以從多方面對系統的活動進行報告,包括:檔案的讀寫情況、系統呼叫的使用情況、磁碟I/O、CPU效率、記憶體使用狀況、程序活動及IPC有關的活動等。
如果系統沒有安裝,可以通過sudo yum install sysstat
來安裝。
二、格式說明
sar [ options ] [ <interval> [ <count> ] ] sar [引數] Usage: sar [ options ] [ <interval> [ <count> ] ] Options are: [ -A ] [ -B ] [ -b ] [ -C ] [ -d ] [ -F [ MOUNT ] ] [ -H ] [ -h ] [ -p ] [ -q ] [ -R ] [ -r ] [ -S ] [ -t ] [ -u [ ALL ] ] [ -V ] [ -v ] [ -W ] [ -w ] [ -y ] [ -I { <int> [,...] | SUM | ALL | XALL } ] [ -P { <cpu> [,...] | ALL } ] [ -m { <keyword> [,...] | ALL } ] [ -n { <keyword> [,...] | ALL } ] [ -j { ID | LABEL | PATH | UUID | ... } ] [ -f [ <filename> ] | -o [ <filename> ] | -[0-9]+ ] [ -i <interval> ] [ -s [ <hh:mm:ss> ] ] [ -e [ <hh:mm:ss> ] ]
三、選項說明
-A 所有報告的總和
-b 顯示I/O和傳遞速率的統計資訊
-B 顯示換頁狀態
-d 輸出每一塊磁碟的使用資訊
-e 設定顯示報告的結束時間
-f 從制定的檔案讀取報告
-i 設定狀態資訊重新整理的間隔時間
-P 報告每個CPU的狀態
-R 顯示記憶體狀態
–u 輸出cpu使用情況和統計資訊
–v 顯示索引節點、檔案和其他核心表的狀態
-w 顯示交換分割槽的狀態
-x 顯示給定程序的裝
-r 報告記憶體利用率的統計資訊
四、命令功能
五、常見用法
5.1 使用-R引數顯示記憶體狀態
# sar -R #每間隔1秒統計一次記憶體狀態 # sar -R 1 #每間隔1秒統計一次記憶體狀態,總共統計5次 # sar -R 1 5
5.2 使用-r報告記憶體利用率的統計資訊
# sar -r
#每間隔1秒統計一次記憶體利用率
# sar -r 1
#每間隔1秒統計一次記憶體利用率,總共統計5次
# sar -r 1 5
10:15:52 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
10:15:53 AM 418204 7590452 94.78 211956 4688244 3511820 43.85 4589848 2338480 400
10:15:54 AM 417956 7590700 94.78 211956 4688244 3511820 43.85 4589848 2338480 92
10:15:55 AM 417956 7590700 94.78 211956 4688244 3511820 43.85 4589848 2338480 92
10:15:56 AM 417832 7590824 94.78 211956 4688252 3511824 43.85 4589848 2338488 100
10:15:57 AM 417460 7591196 94.79 211956 4688252 3511828 43.85 4589868 2338484 100
Average: 417882 7590774 94.78 211956 4688247 3511822 43.85 4589852 2338482 157
# kbmemfree 空閒的實體記憶體大小
# kbmemused 使用中的實體記憶體大小
# %memused 實體記憶體使用率
# kbbuffers 核心中作為緩衝區使用的實體記憶體大小,kbbuffers和kbcached:這兩個值就是free命令中的buffer和cache.
# kbcached 快取的檔案大小
# kbcommit 保證當前系統正常執行所需要的最小記憶體,即為了確保記憶體不溢位而需要的最少記憶體(實體記憶體+Swap分割槽)
# commit 這個值是kbcommit與記憶體總量(實體記憶體+swap分割槽)的一個百分比的值
5.3 使用-b引數顯示I/O速率
# sar -b
#每間隔1秒統計一次I/O速率
# sar -b 1
#每間隔1秒統計一次I/O速率,總共統計5次
# sar -b 1 5
10:18:56 AM tps rtps wtps bread/s bwrtn/s
10:18:57 AM 0.00 0.00 0.00 0.00 0.00
10:18:58 AM 0.00 0.00 0.00 0.00 0.00
10:18:59 AM 2.00 0.00 2.00 0.00 72.00
10:19:00 AM 1.00 0.00 1.00 0.00 8.00
10:19:01 AM 3.00 0.00 3.00 0.00 40.00
Average: 1.20 0.00 1.20 0.00 24.00
# tps 磁碟每秒鐘的IO總數,等於iostat中的tps
# rtps 每秒鐘從磁碟讀取的IO總數
# wtps 每秒鐘從寫入到磁碟的IO總數
# bread/s 每秒鐘從磁碟讀取的塊總數
# bwrtn/s 每秒鐘此寫入到磁碟的塊總數
5.4 使用-d引數檢視磁碟使用詳情統計
# sar -d
#每間隔1秒檢視磁碟使用詳情統計
# sar -d 1
#每間隔1秒檢視磁碟使用詳情統計,總共統計5次
# sar -d 1 5
10:21:49 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
10:21:50 AM dev253-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10:21:50 AM dev11-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10:21:50 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
10:21:51 AM dev253-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10:21:51 AM dev11-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10:21:51 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
10:21:52 AM dev253-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10:21:52 AM dev11-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10:21:52 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
10:21:53 AM dev253-0 2.00 0.00 72.00 36.00 0.00 1.50 0.50 0.10
10:21:53 AM dev11-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10:21:53 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
10:21:54 AM dev253-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10:21:54 AM dev11-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
Average: dev253-0 0.40 0.00 14.40 36.00 0.00 1.50 0.50 0.02
Average: dev11-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
#DEV 磁碟裝置的名稱,如果不加-p,會顯示dev253-0類似的裝置名稱,因此加上-p顯示的名稱更直接
# tps:每秒I/O的傳輸總數
# rd_sec/s 每秒讀取的扇區的總數
# wr_sec/s 每秒寫入的扇區的 總數
# avgrq-sz 平均每次次磁碟I/O操作的資料大小(扇區)
# avgqu-sz 磁碟請求佇列的平均長度
# await 從請求磁碟操作到系統完成處理,每次請求的平均消耗時間,包括請求佇列等待時間,單位是毫秒(1秒等於1000毫秒),等於尋道時間+佇列時間+服務時間
# svctm I/O的服務處理時間,即不包括請求佇列中的時間
# %util I/O請求佔用的CPU百分比,值越高,說明I/O越慢
5.5 使用-u引數顯示CPU利用率
# sar -u
#每間隔1秒統計一次CPU利用率
# sar -u 1
#每間隔1秒統計一次CPU的使用情況,總共統計5次
# sar -u 1 5
10:01:57 AM CPU %user %nice %system %iowait %steal %idle
10:01:58 AM all 0.00 0.00 0.25 0.00 0.00 99.75
10:01:59 AM all 0.25 0.00 0.25 0.00 0.00 99.50
10:02:00 AM all 0.25 0.00 0.00 0.00 0.00 99.75
10:02:01 AM all 0.00 0.00 0.25 0.00 0.00 99.75
10:02:02 AM all 4.75 0.00 1.75 0.25 0.00 93.25
Average: all 1.05 0.00 0.50 0.05 0.00 98.40
#其中
# %user #使用者空間的CPU使用
# %nice 改變過優先順序的程序的CPU使用率
# %system 核心空間的CPU使用率
# %iowait CPU等待IO的百分比
# %steal 虛擬機器的虛擬機器CPU使用的CPU
# %idle 空閒的CPU
在以上引數中,主要看%iowait和%idle,%iowait過高表示存在I/O瓶頸,即磁碟IO無法滿足業務需求,如果%idle過低表示CPU使用率比較嚴重,需要結合記憶體使用等情況判斷CPU是否瓶頸。
5.6 使用-p引數顯示CPU的使用狀態
# sar -p
#每間隔1秒統計一次CPU的使用狀態
# sar -p 1
#每間隔1秒統計一次CPU的使用狀態,總共統計5次
# sar -p 1 5
10:06:33 AM CPU %user %nice %system %iowait %steal %idle
10:06:34 AM all 0.25 0.00 0.25 0.00 0.00 99.50
10:06:35 AM all 0.25 0.00 0.25 0.00 0.00 99.50
10:06:36 AM all 0.00 0.00 0.25 0.00 0.00 99.75
10:06:37 AM all 0.50 0.00 0.25 0.00 0.00 99.25
10:06:38 AM all 0.00 0.00 0.00 0.00 0.00 100.00
Average: all 0.20 0.00 0.20 0.00 0.00 99.60
5.7 使用-q引數檢視平均負載
# sar -q#每間隔1秒統計一次系統負載#sar -q 1#每間隔1秒統計一次系統負載,總共統計5次#sar -q 1 510:23:11 AM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked10:23:12 AM 0 264 0.01 0.02 0.05 010:23:13 AM 0 265 0.01 0.02 0.05 010:23:14 AM 0 265 0.01 0.02 0.05 010:23:15 AM 0 264 0.01 0.02 0.05 010:23:16 AM 0 264 0.01 0.02 0.05 0Average: 0 264 0.01 0.02 0.05 0# runq-sz 執行佇列的長度(等待執行的程序數,每核的CP不能超過3個)# plist-sz 程序列表中的程序(processes)和執行緒數(threads)的數量# ldavg-1 最後1分鐘的CPU平均負載,即將多核CPU過去一分鐘的負載相加再除以核心數得出的平均值,5分鐘和15分鐘以此類推# ldavg-5 最後5分鐘的CPU平均負載# ldavg-15 最後15分鐘的CPU平均負載
5.8 使用-v引數檢視程序、inode、檔案和鎖表狀態
# sar -v#每間隔1秒檢視程序、inode、檔案和鎖表狀態# sar -v 1#每間隔1秒檢視程序、inode、檔案和鎖表狀態,總共統計5次# sar -v 1 510:25:00 AM dentunusd file-nr inode-nr pty-nr10:25:01 AM 722442 2496 173855 310:25:02 AM 722466 2496 173863 310:25:03 AM 722466 2496 173863 310:25:04 AM 722466 2496 173863 310:25:05 AM 722466 2496 173863 3Average: 722461 2496 173861 3# dentunusd 在緩衝目錄條目中沒有使用的條目數量# file-nr 被系統使用的檔案控制代碼數量# inode-nr 已經使用的索引數量 # pty-nr 使用的pty數量#這裡面的索引和檔案控制代碼值不是ulimit -a檢視到的值,而是sysctl.conf裡面定義的和核心相關的值, max-file表示系統級別的能夠開啟的檔案控制代碼的數量, 而ulimit -n控制程序級別能夠開啟的檔案控制代碼的數量,可以使用sysctl -a | grep inode和sysctl -a | grep file檢視,具體含義如下:file-max中指定了系統範圍內所有程序可開啟的檔案控制代碼的數量限制(系統級別, kernel-level)。 (The value in file-max denotes the maximum number of file handles that the Linux kernel will allocate)。當收到"Too many open files in system"這樣的錯誤訊息時, 就應該曾加這個值了。# cat /proc/sys/fs/file-max791241# echo 100000 > /proc/sys/fs/file-max或者# echo "fs.file-max=65535" >> /etc/sysctl.conf# sysctl -pnet.ipv4.ip_forward = 0net.ipv4.conf.default.rp_filter = 1net.ipv4.conf.default.accept_source_route = 0kernel.core_uses_pid = 1net.ipv4.tcp_syncookies = 1kernel.msgmnb = 65536kernel.msgmax = 65536net.ipv4.conf.all.promote_secondaries = 1net.ipv4.conf.default.promote_secondaries = 1net.ipv6.neigh.default.gc_thresh3 = 4096net.ipv4.neigh.default.gc_thresh3 = 4096kernel.softlockup_panic = 1kernel.sysrq = 1net.ipv6.conf.all.disable_ipv6 = 0net.ipv6.conf.default.disable_ipv6 = 0net.ipv6.conf.lo.disable_ipv6 = 0kernel.numa_balancing = 0kernel.shmmax = 68719476736kernel.printk = 5fs.file-max = 65535# cat /proc/sys/fs/file-nr2496 0 65535file-nr 可以檢視系統中當前開啟的檔案控制代碼的數量。 他裡面包括3個數字: 第一個表示已經分配了的檔案描述符數量, 第二個表示空閒的檔案控制代碼數量, 第三個表示能夠開啟檔案控制代碼的最大值(跟file-max一致)。 核心會動態的分配檔案控制代碼, 但是不會再次釋放他們(這個可能不適應最新的核心了,在我的file-nr中看到第二列一直為0, 第一列有增有減) man bash, 找到說明ulimit的那一節:提供對shell及其啟動的程序的可用資源(包括檔案控制代碼, 程序數量, core檔案大小等)的控制。 這是程序級別的, 也就是說系統中某個session及其啟動的每個程序能開啟多少個檔案描述符, 能fork出多少個子程序等... 當達到上限時, 會報錯"Too many open files"或者遇上Socket/File: Can’t open so many files等
5.9 使用-n引數統計網路資訊
# sar -n#sar -n選項使用6個不同的開關:DEV,EDEV,NFS,NFSD,SOCK,IP,EIP,ICMP,EICMP,TCP,ETCP,UDP,SOCK6,IP6,EIP6,ICMP6,EICMP6和UDP6 ,DEV顯示網路介面資訊,EDEV顯示關於網路錯誤的統計資料,NFS統計活動的NFS客戶端的資訊,NFSD統計NFS伺服器的資訊,SOCK顯示套接字資訊,ALL顯示所有5個開關。它們可以單獨或者一起使用。 #每間隔1秒統計網路資訊# sar -n DEV 1#每間隔1秒統計網路資訊,總共統計5次# sar -n DEV 1 510:35:40 AM IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s10:35:41 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0010:35:41 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0010:35:41 AM IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s10:35:42 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0010:35:42 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0010:35:42 AM IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s10:35:43 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0010:35:43 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0010:35:43 AM IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s10:35:44 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0010:35:44 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0010:35:44 AM IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s10:35:45 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0010:35:45 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00Average: IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/sAverage: eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00# IFACE 本地網絡卡介面的名稱# rxpck/s 每秒鐘接受的資料包# txpck/s 每秒鐘傳送的資料庫# rxKB/S 每秒鐘接受的資料包大小,單位為KB# txKB/S 每秒鐘傳送的資料包大小,單位為KB# rxcmp/s 每秒鐘接受的壓縮資料包# txcmp/s 每秒鐘傳送的壓縮包# rxmcst/s 每秒鐘接收的多播資料包
5.10 使用-n引數統計網路裝置通訊失敗資訊
#每間隔1秒統計網路裝置通訊失敗資訊# sar -n EDEV 1#每間隔1秒統計網路裝置通訊失敗資訊,總共統計5次# sar -n EDEV 1 510:47:30 AM IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s10:47:31 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0010:47:31 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0010:47:31 AM IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s10:47:32 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0010:47:32 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0010:47:32 AM IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s10:47:33 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0010:47:33 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0010:47:33 AM IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s10:47:34 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0010:47:34 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0010:47:34 AM IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s10:47:35 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0010:47:35 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00Average: IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/sAverage: eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00# IFACE 網絡卡名稱# rxerr/s 每秒鐘接收到的損壞的資料包# txerr/s 每秒鐘傳送的資料包錯誤數# coll/s 當傳送資料包時候,每秒鐘發生的衝撞(collisions)數,這個是在半雙工模式下才有# rxdrop/s 當由於緩衝區滿的時候,網絡卡裝置接收端每秒鐘丟掉的網路包的數目# txdrop/s 當由於緩衝區滿的時候,網路裝置傳送端每秒鐘丟掉的網路包的數目# txcarr/s 當傳送資料包的時候,每秒鐘載波錯誤發生的次數# rxfram 在接收資料包的時候,每秒鐘發生的幀對其錯誤的次數# rxfifo 在接收資料包的時候,每秒鐘緩衝區溢位的錯誤發生的次數# txfifo 在發生資料包 的時候,每秒鐘緩衝區溢位的錯誤發生的次數
5.11 使用-n引數統計socket連線資訊
#每間隔1秒統計socket連線資訊# sar -n SOCK 1#每間隔1秒統計socket連線資訊,總共統計5次# sar -n SOCK 1 510:49:36 AM totsck tcpsck udpsck rawsck ip-frag tcp-tw10:49:37 AM 503 247 3 0 0 310:49:38 AM 503 247 3 0 0 310:49:39 AM 503 247 3 0 0 210:49:40 AM 503 247 3 0 0 210:49:41 AM 503 247 3 0 0 2Average: 503 247 3 0 0 2# totsck 當前被使用的socket總數# tcpsck 當前正在被使用的TCP的socket總數# udpsck 當前正在被使用的UDP的socket總數# rawsck 當前正在被使用於RAW的skcket總數# if-frag 當前的IP分片的數目# tcp-tw TCP套接字中處於TIME-WAIT狀態的連線數量#如果你使用FULL關鍵字,相當於上述DEV、EDEV和SOCK三者的綜合
5.12 使用-n引數統計TCP連線資訊
#每間隔1秒統計TCP連線資訊# sar -n TCP 1#每間隔1秒統計TCP連線資訊,總共統計5次# sar -n TCP 1 510:51:35 AM active/s passive/s iseg/s oseg/s10:51:36 AM 1.00 0.00 7.00 6.0010:51:37 AM 1.00 0.00 11.00 10.0010:51:38 AM 1.00 0.00 7.00 7.0010:51:39 AM 0.00 0.00 1.00 1.0010:51:40 AM 0.00 0.00 1.00 1.00Average: 0.60 0.00 5.40 5.00# active/s 新的主動連線# passive/s 新的被動連線# iseg/s 接受的段# oseg/s 輸出的段
5.13 sar -n 使用總結
# sar -n DEV : 網路介面統計資訊。# sar -n EDEV : 網路介面錯誤。# sar -n IP : IP資料報統計資訊。# sar -n EIP : IP錯誤統計資訊。# sar -n TCP : TCP統計資訊。# sar -n ETCP : TCP錯誤統計資訊。# sar -n SOCK : 套接字使用。
Bsh
5.14 將統計結果儲存在檔案並從檔案讀取內容
#sar -u -o /tmp/tmp1.txt 1 5 #儲存之檔案,儲存後的檔案是二進位制的,無法使用vim和cat直接開啟# sar -u -f /tmp/tmp1.txt #從二進位制檔案讀取
5.15 其他命令使用匯總
預設監控: sar 1 5 // CPU和IOWAIT統計狀態 (1) sar -b 1 5 // IO傳送速率(2) sar -B 1 5 // 頁交換速率(3) sar -c 1 5 // 程序建立的速率(4) sar -d 1 5 // 塊裝置的活躍資訊(5) sar -n DEV 1 5 // 網路裝置的狀態資訊(6) sar -n SOCK 1 5 // SOCK的使用情況(7) sar -n ALL 1 5 // 所有的網路狀態資訊(8) sar -P ALL 1 5 // 每顆CPU的使用狀態資訊和IOWAIT統計狀態 (9) sar -q 1 5 // 佇列的長度(等待執行的程序數)和負載的狀態(10) sar -r 1 5 // 記憶體和swap空間使用情況(11) sar -R 1 5 // 記憶體的統計資訊(記憶體頁的分配和釋放、系統每秒作為BUFFER使用記憶體頁、每秒被cache到的記憶體頁)(12) sar -u 1 5 // CPU的使用情況和IOWAIT資訊(同預設監控)(13) sar -v 1 5 // inode, file and other kernel tablesd的狀態資訊(14) sar -w 1 5 // 每秒上下文交換的數目(15) sar -W 1 5 // SWAP交換的統計資訊(監控狀態同iostat 的si so)(16) sar -x 2906 1 5 // 顯示指定程序(2906)的統計資訊,資訊包括:程序造成的錯誤、使用者級和系統級使用者CPU的佔用情況、執行在哪顆CPU上(17) sar -y 1 5 // TTY裝置的活動狀態(18) sar -u -o /tmp/temp1.txt 1 5 #儲存之檔案,儲存後的檔案是二進位制的,無法使用vim和cat直接開啟(19) sar -u -f /tmp/temp1.txt #從二進位制檔案讀取,將輸出到檔案(-o)和讀取記錄資訊(-f)
5.15 拓展
(1) sysstat
sysstat 是 Linux 系統中的常用工具包。它的主要用途是觀察服務負載,比如CPU和記憶體的佔用率、網路的使用率以及磁碟寫入和讀取速度等。
sysstat 工具包中包含兩類工具:
- 即時檢視工具:iostat、mpstat、sar
- 累計統計工具:sar
也就是說,sar 具有這兩種功能。因此,sar 是 sysstat 中的核心工具。
為了實現 sar 的累計統計,系統必須週期地記錄當時的資訊,這是通過呼叫 /usr/lib/sa/ 中的三個工具實現的:
- sa1 :收集並存儲每天系統動態資訊到一個二進位制的檔案中,用作 sadc 的前端程式
- sa2 :收集每天的系統活躍資訊寫入總結性的報告,用作 sar 的前端程式
- sadc :系統動態資料收集工具,收集的資料被寫入一個二進位制的檔案中,它被用作 sar 工具的後端
在 CentOS 系統的預設設定中,以如下的方式使用這三個工具:
- 在守護程序 /etc/rc.d/init.d/sysstat 中使用
/usr/lib/sa/sadc -F -L -
命令建立當日記錄檔案,檔案為/var/log/sa/saDD
,其中 DD 為當天的日期。當系統重新啟動後,會向檔案/var/log/sa/saDD
輸出類似11: 37:16 AM LINUX RESTART
這樣的行資訊。 - 在 cron 任務 /etc/cron.d/sysstat 中每隔10分鐘執行一次
/usr/lib/sa/sa1 1 1
命令,將資訊寫入檔案/var/log/sa/saDD
- 在 cron 任務 /etc/cron.d/sysstat 中每天 23:53 執行一次
/usr/lib/sa/sa2 -A
命令,將當天的彙總資訊寫入檔案/var/log/sa/saDD
可以修改 /etc/cron.d/sysstat 以適合您的需要。
另外,檔案/var/log/sa/saDD
為二進位制檔案,不能使用 more、less 等文字工具檢視,必須用 sar 或 sadf 命令檢視。
(2) 另外,網路相關的錯誤排查,可以有幾種方式:
1 找系統類的錯誤, dmesg | tail2 直接的網路錯誤 sar -n ETCP 1 或者 sar -n EDEV 13 檢視網路狀態, netstat -s 或者 watch -d netstat -s4 網路狀態的統計 ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}'
(3) 要判斷一個系統瓶頸問題,有時需要幾個 sar 命令選項結合起來使用,例如:
- 懷疑CPU存在瓶頸,可用
sar -u
和sar -q
等命令來檢視 - 懷疑記憶體存在瓶頸,可用
sar -B
、sar -r
和sar -W
等命令來檢視 - 懷疑I/O存在瓶頸,可用
sar -b
、sar -u
和sar -d
等命令來檢視
本文為joshua317原創文章,轉載請註明:轉載自joshua317部落格https://www.joshua317.com/article/191