[轉]裘巨集駿:Linux 相關效能分析工具
iostat
iostat命令是另一個研究磁碟吞吐量 的工具。和sar類似,iostat可以使用間隔和計數引數。第一個間隔的輸出包含Linux總執行時間的指標。與其他效能命令比較,這可能是 iostat最獨特的功能。例如,以下是一個大部分時間處於空閒的系統的輸出。可見,從啟動以來hda裝置已經讀取大約9 158MB(18 755 572*512/1 024/1 024)。Blk列是512位元組塊。
不使用選項,iostat只顯示覆蓋啟動以來全部時間的一組指標。
CPU資訊包含基本上和top一樣的欄位。iostat CPU輸出顯示在使用者模式中執行、執行正常程序、在核心(系統)模式中執行,程序等待I/O完成時處於空閒和沒有等待程序時處於空閒的CPU時間的百分比。CPU行是所有CPU的摘要。
磁碟資訊與sar -d提供的資訊類似。輸出包括每秒傳輸數(tps)、每秒512位元組塊讀取數(Blk_read/s)、每秒512位元組塊寫入數(Blk_wrtn/s)和512位元組塊讀取(Blk_read)和寫入(Blk_wrtn)的總數量。
iostat提供幾個用於定製輸出的開關。最有用的有:
-c 只顯示CPU行
-d 顯示磁碟行
-k 以千位元組為單位顯示磁碟輸出
-t 在輸出中包括時間戳
-x 在輸出中包括擴充套件的磁碟指標
這些選項可以組合。iostat -tk 5 2的輸出是:
vmstat
vmstat命令也是顯示Linux效能指標的方法,它報告了許多資訊,理解這些資訊有一定難度。
輸出分為6個類別:程序、記憶體、交換區、I/O、系統和CPU。與iostat類似,第一個樣本是從最近重新啟動以來的平均值。以下是一個典型的vmstat輸出:
-m選項使記憶體欄位以兆位元組為單位顯示。vmstat和許多其他效能命令一樣使用取樣間隔和計數引數。
程序(procs)資訊有兩列。r列是可執行程序的數量,b列是阻塞程序的數量。
記憶體部分有4個報告虛擬記憶體如何使用的欄位。表3-7列出這些欄位及其意義。
表3-7 vmstat記憶體欄位
字 段 | 說 明 |
Swpd | 已用的交換空間數量 |
free | 自由RAM數量 |
buff | 緩衝使用的RAM數量 |
cache | 檔案系統快取使用的RAM數量 |
接下來是交換(swap)指標。交換隻是一個古老術語,但是顯然不會消失。交換涉及分頁讀取或寫入磁碟 的程序所消耗的所有記憶體。它將顯示系統達到的效能指標水平。而Linux所做的是,以小塊方式按照需要對磁碟空間進行分頁操作。因此,我們可能應該停止說 交換到磁碟的記憶體,並開始說分頁到磁碟的記憶體。對於任何一種方法,表3-8解釋了相關欄位。
表3-8 vmstat交換欄位
字 段 | 說 明 |
si | 從磁碟分頁到記憶體的數量 |
so | 從記憶體分頁到磁碟的數量 |
在交換之後是兩個I/O欄位。這部分提供了一個簡略介紹以幫助確定Linux是否正忙於完成許多磁碟I/O。vmstat只提供兩個欄位,顯示出入磁碟的資料量(參見表3-9)。
表3-9 vmstat io欄位
字 段 | 說 明 |
bi | 從磁碟讀入的塊 |
bo | 寫入磁碟的塊 |
系統欄位提供Linux核心進行程序管理的繁忙程度的摘要。中斷和上下文開關參見表3-10。上下文開關指程序移出CPU或者移入CPU。
表3-10 vmstat系統欄位
字 段 | 說 明 |
in | 系統中斷 |
cs | 程序上下文開關 |
最後,CPU狀態資訊用總CPU時間的百分比來表示,如表3-11所示。
表3-11 vmstat cpu欄位
字 段 | 說 明 |
us | 使用者模式 |
sy | 核心模式 |
wa | 等待I/O |
id | 空閒 |
sarsar是一個優秀的一般效能監視工具,它可以輸出Linux所完成的幾乎所有工作的資料。sar命令在sysetat rpm中提供。示例中使用sysstat版本5.0.5,這是穩定的最新版本之一。關於版本和下載資訊,請訪問sysstat主頁 http://perso.wanadoo.fr/sebastien.godard/。
sar可以顯示CPU、執行佇列、磁碟I/O、分頁(交換區)、記憶體、CPU中斷、網路等效能資料。最重要的sar功能是建立資料檔案。每一個 Linux系統都應該通過cron工作收集sar資料。該sar資料檔案為系統管理員提供歷史性能資訊。這個功能非常重要,它將sar和其他效能工具區分 開。如果一個夜晚批處理工作正常執行兩次,直到下一個早上才會發現這種情況(除非被叫醒)。我們需要具備研究12小時以前的效能資料的能力。sar資料收 集器提供了這種能力。有許多報告語法,我們首先討論資料收集。
3.2.1 sar資料收集器
sar資料收集通過/usr/lib/sa中的一個二進位制可執行檔案和兩個指令碼來完成。sar資料收集器是一個位於/usr/lib/sa /sadc的二進位制可執行檔案。sadc的工作是寫入資料收集檔案/var/1og/sa/。可以為sadc提供幾個選項。常見語法是:
間隔是取樣間的秒數,iterations是要取得的樣本數量,file name定義輸出檔案。簡單的sadc語法是/usr/lib/sa/sadc 360 5/tmp/sadc.out。這個命令在5分鐘間隔取得5個樣本並將它們儲存在/tmp/sadc.out。我們應該定期收集樣本,因此需要一個由 cron執行的指令碼。應該把樣本放在一個有意義的地方,如在前一節中使用top指令碼時那樣。sysstat rpm提供/usr/lib/sa/sa1指令碼來完成所有這些事情。
sa1(8)手冊頁比sa1指令碼本身要長得多。/usr/lib/sa/sa1是一個非常簡單的指令碼,使用語法sadc -F -L 1 1 /var/log/sa/sa##來執行sadc,其中##是某月的日期。較老版本的sa1使用date+.%Y_%m_%d的輸出作為檔案字尾。如果需 要,可以使用-F選項使sadc強制建立輸出檔案。-L在寫入輸出檔案之前鎖定它,以防止兩個sadc程序同時執行時損壞該檔案。較老版本的sadc沒有 -L選項,因此sa1指令碼執行手工鎖定。sa1指令碼的選項只是樣本之間的間隔和取樣迭代的次量。cron檔案(/etc/cron.d/sysstat) 和sysstat一起提供,在各sysstat版本之間它有所不同。以下是5.0.5版本的sysstat的條目:
可見,在sysstat rpm安裝之後,sadc開始取得樣本。sysstat主頁是http://perso.wanadoo.fr/ sebastien.godard/2。文件連結提供以下類似2006年1月14日的crontab方案:
Sebastien Godard的網站的crontab示例建議週一至週五從早晨8點到下午6點每10分鐘取一次樣本,其他時間每小時取得一個樣本(注意,crontab注 釋為下午7點,但實際上是18:00,即下午6點)。如果/var中的磁碟空間足夠,可以每天都每小時的每10分鐘取樣一次。如果週末備份較慢,每小時一 次sadc取樣可能幫助不大。
現在讓我們研究更流行的報告語法。
3.2.2 CPU統計資料
sar -u輸出顯示CPU資訊。-u選項是sar的預設選項。該輸出以百分比顯示CPU的使用情況。表3-2解釋該輸出。
表3-2 sar -u欄位
字 段 | 說 明 |
CPU | CPU編號 |
%user | 在使用者模式中執行程序所花的時間 |
%nice | 執行正常程序所花的時間 |
%system | 在核心模式(系統)中執行程序所花的時間 |
%iowait | 沒有程序在該CPU上執行時,處理器等待I/O完成的時間 |
%idle | 沒有程序在該CPU上執行的時間 |
這些看起來應該比較熟悉,它和top報告中的CPU資訊內容相同。以下顯示輸出格式:
其中的5 10導致sar以5秒鐘間隔取得10個樣本。任何sar報告的第一列都是時間戳。
我們本來可以研究使用-f選項通過sadc建立的檔案。這個sar語法顯示sar -f/var/log/ sa/sa21的輸出:
在多CPU Linux系統中,sar命令也可以為每個CPU分解該資訊,如以下sar -u -P ALL 5 5輸出所示:
3.2.3 磁碟I/O統計資料
sar是一個研究磁碟I/O的優秀工具。以下是sar磁碟I/O輸出的一個示例。
第一行-d顯示磁碟I/O資訊,5 2選項是間隔和迭代,就像sar資料收集器那樣。表3-3列出了欄位和說明。
表3-3 sar -d欄位
字 段 | 說 明 |
DEV | 磁碟裝置 |
tps | 每秒傳輸數(或者每秒IO數) |
rd_sec/s | 每秒512位元組讀取數 |
wr_sec/s | 每秒512位元組寫入數 |
512只是一個測量單位,不表示所有磁碟I/O均使用512位元組塊。DEV列是dev#-#格式的磁碟裝置,其中第一個#是裝置主編號,第二個#是 次編號或者連續編號。對於大於2.5的核心,sar使用次編號。例如,在sar -d輸出中看到的dev3-0和dev3-1。它們對應於/dev/hda和/dev/hdal。請看/dev中的以下各項:
/dev/hda有主編號3和次編號0。hda1有主編號3和次編號1。
3.2.4 網路統計資料
sar提供四種不同的語法選項來顯示網路資訊。-n選項使用四個不同的開關:DEV、EDEV、SOCK和FULL。DEV顯示網路介面信 息,EDEV顯示關於網路錯誤的統計資料,SOCK顯示套接字資訊,FULL顯示所有三個開關。它們可以單獨或者一起使用。表3-4顯示通過-n DEV選項報告的欄位。
表3-4 sar -n DEV欄位
字 段 | 說 明 |
IFACE | LAN介面 |
rxpck/s | 每秒鐘接收的資料包 |
txpck/s | 每秒鐘傳送的資料包 |
rxbyt/s | 每秒鐘接收的位元組數 |
txbyt/s | 每秒鐘傳送的位元組數 |
rxcmp/s | 每秒鐘接收的壓縮資料包 |
txcmp/s | 每秒鐘傳送的壓縮資料包 |
rxmcst/s | 每秒鐘接收的多播資料包 |
以下是使用-n DEV選項的sar輸出:
關於網路錯誤的資訊可以用sar -n EDEV顯示。表3-5列出了顯示的欄位。
表3-5 sar -n EDEV欄位
字 段 | 說 明 |
IFACE | LAN介面 |
rxerr/s | 每秒鐘接收的壞資料包 |
txerr/s | 每秒鐘傳送的壞資料包 |
coll/s | 每秒衝突數 |
rxdrop/s | 因為緩衝充滿,每秒鐘丟棄的已接收資料包數 |
txdrop/s | 因為緩衝充滿,每秒鐘丟棄的已傳送資料包數 |
txcarr/s | 傳送資料包時,每秒載波錯誤數 |
rxfram/s | 每秒接收資料包的幀對齊錯誤數 |
rxfifo/s | 接收的資料包每秒FIFO過速的錯誤數 |
txfifo/s | 傳送的資料包每秒FIFO過速的錯誤數 |
SOCK引數顯示IPCS套接字資訊。表3-6列出顯示的欄位及其意義。
表3-6 sar -n SOCK欄位
字 段 | 說 明 |
totsck | 使用的套接字總數量 |
tcpsck | 使用的TCP套接字數量 |
udpsck | 使用的UDP套接字數量 |
rawsck | 使用的raw套接字數量 |
ip-frag | 使用的IP段數量 |
sar可以產生許多其他報告。我們有必要仔細閱讀sar(1)手冊頁,檢視是否有自己需要的其他報告。
如非註明轉載, 均為原創. 本站遵循知識共享CC協議,轉載請註明來源