每天一個 Linux 命令(47): iostat 命令

發表於2017-01-25

Linux系統中的 iostat是I/O statistics(輸入/輸出統計)的縮寫,iostat工具將對系統的磁碟操作活動進行監視。它的特點是彙報磁碟活動統計情況,同時也會彙報出CPU使用情況。同vmstat一樣,iostat也有一個弱點,就是它不能對某個程式進行深入分析,僅對系統的整體情況進行分析。iostat屬於sysstat軟體包。可以用yum install sysstat 直接安裝。

1.命令格式:

2.命令功能:

通過iostat方便檢視CPU、網路卡、tty裝置、磁碟、CD-ROM 等等裝置的活動情況, 負載資訊。

3.命令引數:

4.使用例項:

例項1:顯示所有裝置負載情況

命令:

輸出:

說明:

cpu屬性值說明:

備註:如果%iowait的值過高,表示硬碟存在I/O瓶頸,%idle值高,表示CPU較空閒,如果%idle值高但系統響應慢時,有可能是CPU等待分配記憶體,此時應加大記憶體容量。%idle值如果持續低於10,那麼系統的CPU處理能力相對較低,表明系統中最需要解決的資源是CPU。

disk屬性值說明:

 

備註:如果 %util 接近 100%,說明產生的I/O請求太多,I/O系統已經滿負荷,該磁碟可能存在瓶頸。如果 svctm 比較接近 await,說明 I/O 幾乎沒有等待時間;如果 await 遠大於 svctm,說明I/O 佇列太長,io響應太慢,則需要進行必要優化。如果avgqu-sz比較大,也表示有當量io在等待。

例項2:定時顯示所有資訊

命令:

輸出:

說明:

每隔 2秒重新整理顯示,且顯示3次

例項3:顯示指定磁碟資訊

命令:

輸出:

說明:

例項4:顯示tty和Cpu資訊

命令:

輸出:

說明:

例項5:以M為單位顯示所有資訊

命令:

輸出:

說明:

例項6:檢視TPS和吞吐量資訊

命令:

輸出:

說明:

tps:該裝置每秒的傳輸次數(Indicate the number of transfers per second that were issued to the device.)。“一次傳輸”意思是“一次I/O請求”。多個邏輯請求可能會被合併為“一次I/O請求”。“一次傳輸”請求的大小是未知的。

這些單位都為Kilobytes。

上面的例子中,我們可以看到磁碟sda以及它的各個分割槽的統計資料,當時統計的磁碟總TPS是22.73,下面是各個分割槽的TPS。(因為是瞬間值,所以總TPS並不嚴格等於各個分割槽TPS的總和)

例項7:檢視裝置使用率(%util)、響應時間(await)

命令:

輸出:

說明:

如果 %util 接近 100%,說明產生的I/O請求太多,I/O系統已經滿負荷,該磁碟可能存在瓶頸。

idle小於70% IO壓力就較大了,一般讀取速度有較多的wait。

同時可以結合vmstat 檢視檢視b引數(等待資源的程式數)和wa引數(IO等待所佔用的CPU時間的百分比,高過30%時IO壓力高)。

另外 await 的引數也要多和 svctm 來參考。差的過高就一定有 IO 的問題。

avgqu-sz 也是個做 IO 調優時需要注意的地方,這個就是直接每次操作的資料的大小,如果次數多,但資料拿的小的話,其實 IO 也會很小。如果資料拿的大,才IO 的資料會高。也可以通過 avgqu-sz × ( r/s or w/s ) = rsec/s or wsec/s。也就是講,讀定速度是這個來決定的。

svctm 一般要小於 await (因為同時等待的請求的等待時間被重複計算了),svctm 的大小一般和磁碟效能有關,CPU/記憶體的負荷也會對其有影響,請求過多也會間接導致 svctm 的增加。await 的大小一般取決於服務時間(svctm) 以及 I/O 佇列的長度和 I/O 請求的發出模式。如果 svctm 比較接近 await,說明 I/O 幾乎沒有等待時間;如果 await 遠大於 svctm,說明 I/O 佇列太長,應用得到的響應時間變慢,如果響應時間超過了使用者可以容許的範圍,這時可以考慮更換更快的磁碟,調整核心 elevator 演算法,優化應用,或者升級 CPU。

佇列長度(avgqu-sz)也可作為衡量系統 I/O 負荷的指標,但由於 avgqu-sz 是按照單位時間的平均值,所以不能反映瞬間的 I/O 洪水。

形象的比喻:
r/s+w/s 類似於交款人的總數
平均佇列長度(avgqu-sz)類似於單位時間裡平均排隊人的個數
平均服務時間(svctm)類似於收銀員的收款速度
平均等待時間(await)類似於平均每人的等待時間
平均I/O資料(avgrq-sz)類似於平均每人所買的東西多少
I/O 操作率 (%util)類似於收款臺前有人排隊的時間比例

裝置IO操作:總IO(io)/s = r/s(讀) +w/s(寫) =1.46 + 25.28=26.74
平均每次裝置I/O操作只需要0.36毫秒完成,現在卻需要10.57毫秒完成,因為發出的 請求太多(每秒26.74個),假如請求時同時發出的,可以這樣計算平均等待時間:
平均等待時間=單個I/O伺服器時間*(1+2+…+請求總數-1)/請求總數
每秒發出的I/0請求很多,但是平均佇列就4,表示這些請求比較均勻,大部分處理還是比較及時。

例項8:檢視cpu狀態

命令:

輸出:

說明:

本系列文章:

每天一個 Linux 命令(1):ls命令
每天一個 Linux 命令(2):cd命令
每天一個 Linux 命令(3):pwd命令
每天一個 Linux 命令(4):mkdir命令
每天一個 Linux 命令(5):rm 命令
每天一個 Linux 命令(6):rmdir 命令
每天一個 Linux 命令(7):mv命令
每天一個 Linux 命令(8):cp 命令
每天一個 Linux 命令(9):touch 命令
每天一個 Linux 命令(10):cat 命令
每天一個 Linux 命令(11):nl 命令
每天一個 Linux 命令(12):more 命令
每天一個 Linux 命令(13):less 命令
每天一個 Linux 命令(14):head 命令
每天一個 Linux 命令(15):tail 命令
每天一個 Linux 命令(16):which命令
每天一個 Linux 命令(17):whereis 命令
每天一個 Linux 命令(18):locate 命令
每天一個 Linux 命令(19):find 命令概覽
每天一個 Linux 命令(20):find命令之exec
每天一個 Linux 命令(21):find命令之xargs
每天一個 Linux 命令(22):find 命令的引數詳解
每天一個 Linux 命令(23):Linux 目錄結構
每天一個 Linux 命令(24):Linux 檔案型別與副檔名
每天一個 Linux 命令(25):Linux 檔案屬性詳解
每天一個 Linux 命令(26):用 SecureCRT 來上傳和下載檔案
每天一個 Linux 命令(27):linux chmod 命令
每天一個 Linux 命令(28):tar 命令
每天一個 Linux 命令(29): chgrp 命令
每天一個 Linux 命令(30): chown 命令
每天一個 Linux 命令(31): /etc/group 檔案詳解
每天一個 Linux 命令(32):gzip 命令
每天一個 Linux 命令(33):df 命令
每天一個 Linux 命令(34): du 命令
每天一個 Linux 命令(35): ln 命令
每天一個 Linux 命令(36): diff 命令
每天一個 Linux 命令(37): date 命令
每天一個 Linux 命令(38): cal 命令
每天一個 Linux 命令(39): grep 命令
每天一個 Linux 命令(40): wc 命令
每天一個 Linux 命令(41): ps 命令
每天一個 Linux 命令(44): top 命令
每天一個 Linux 命令(45): free 命令
每天一個 Linux 命令(46): vmstat 命令

相關文章