linux 查看硬盤i/o的狀態

    Linux系統出現了性能問題,硬盤的讀寫速度及狀態是我們判斷服務器性能的一個重要參考,而iostat可以給我們提供豐富的IO狀態數據。

基本使用

$iostat -d -k 1 10
參數 -d 表示,顯示設備(磁盤)使用狀態;-k某些使用block爲單位的列強制使用Kilobytes爲單位;1 10表示,數據顯示每隔1秒刷新一次,共顯示10次。

# iostat -x 1 10

wKiom1NOJ2HycYLVAAFIIc4Lr1E988.jpg
rrqm/s:   每秒進行 merge 的讀操作數目。即 delta(rmerge)/s
wrqm/s:  每秒進行 merge 的寫操作數目。即 delta(wmerge)/s
r/s:           每秒完成的讀 I/O 設備次數。即 delta(rio)/s
w/s:         每秒完成的寫 I/O 設備次數。即 delta(wio)/s
rsec/s:    每秒讀扇區數。即 delta(rsect)/s
wsec/s:  每秒寫扇區數。即 delta(wsect)/s
rkB/s:      每秒讀K字節數。是 rsect/s 的一半,因爲每扇區大小爲512字節。(需要計算)
wkB/s:    每秒寫K字節數。是 wsect/s 的一半。(需要計算)
avgrq-sz: 平均每次設備I/O操作的數據大小 (扇區)。delta(rsect+wsect)/delta(rio+wio)
avgqu-sz: 平均I/O隊列長度。即 delta(aveq)/s/1000 (因爲aveq的單位爲毫秒)。
await:    平均每次設備I/O操作的等待時間 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
svctm:   平均每次設備I/O操作的服務時間 (毫秒)。即 delta(use)/delta(rio+wio)
%util:      一秒中有百分之多少的時間用於 I/O 操作,或者說一秒中有多少時間 I/O 隊列是非空的。即 delta(use)/s/1000 (因爲use的單位爲毫秒)


如果 %util 接近 100%,說明產生的I/O請求太多,I/O系統已經滿負荷,該磁盤可能存在瓶頸。
idle小於70% IO壓力就較大了,一般讀取速度有較多的wait.


同時可以結合vmstat 查看查看b參數(等待資源的進程數)和wa參數(IO等待所佔用的CPU時間的百分比,高過30%時IO壓力高)

另外還可以參考:
一般情況
svctm < await (因爲同時等待的請求的等待時間被重複計算了),
svctm的大小一般和磁盤性能有關:CPU/內存的負荷也會對其有影響,請求過多也會間接導致 svctm 的增加。
await: await的大小一般取決於服務時間(svctm) 以及 I/O 隊列的長度和 I/O 請求的發出模式。
如果 svctm 比較接近 await,說明I/O 幾乎沒有等待時間;
如果 await 遠大於 svctm,說明 I/O隊列太長,應用得到的響應時間變慢,
如果響應時間超過了用戶可以容許的範圍,這時可以考慮更換更快的磁盤,調整內核 elevator算法,優化應用,或者升級 CPU。
隊列長度(avgqu-sz)也可作爲衡量系統 I/O 負荷的指標,但由於 avgqu-sz 是按照單位時間的平均值,所以不能反映瞬間的 I/O 洪水。 

 # iostat -x 1

wKioL1NOKA2Sy339AAEiXaavKoo171.jpg上面的 iostat 輸出表明秒有 11.88 次設備 I/O 操作: 總IO(io)/s = r/s(讀) +w/s(寫) = 6.49+7.39 = 11.88 (次/秒) 其中寫操作佔了主體 (w:r = 7:6)。
平均每次設備 I/O 操作只需要 5ms 就可以完成,這是比較正常的數值。

  因爲發出的 I/O 請求太多 ,假設這些請求是同時發出的,那麼平均等待時間可以這樣計算:
平均等待時間 = 單個 I/O 服務時間 * ( 1 + 2 + ... + 請求總數-1) / 請求總數。    Input Output statistics (  iostat )

  iostat反映了終端、磁盤I/O情況和CPU活動。輸出結果的第一行是從系統啓動到現在爲止的這段時間的結果,接下去的每一行是interval時間段內的結果。Kernel裏有一組計數器用來跟蹤這些值。
  iostat的默認參數是tdc(terminal,  disk, and CPU)。如果任何其他的選項被指定,這個默認參數將被完全替代,例如,iostat -d將只反映磁盤的統計結果。

語法:

基本語法: iostat  ;   interval  count

option - 讓你指定所需信息的設備,像磁盤、cpu或者終端(-d , -c , -t  or -tdc ) 。x 選項給出了完整的統計結果(gives the extendedstatistic)。

interval -  在兩個samples之間的時間(秒)。

count  - 就是需要統計幾次。

例子:

$ iostat -xtc 5 2
      wKiom1NOL8OyR5caAAC6GnjcT0E317.jpg

     The fields have the following meanings:

      disk    name of the disk
      r/s     reads per second
      w/s     writes per second
      Kr/s    kilobytes read per second
      Kw/s    kilobytes written per second
      wait    average number of transactions waiting for service (Q length)
      actv    average number of transactions  actively 
              being serviced (removed  from  the queue but not yet  completed)
      %w      percent of time there are transactions  waiting    for service (queue non-empty)
      %b      percent of time the disk is busy  (transactions
                  in progress)R

esults and Solutions:

從iostat輸出結果中需要注意的值:

Reads/writes  per second (r/s , w/s)
Percentage busy (%b)
Service time (svc_t)

如果磁盤顯示長時間的高reads/writes,並且磁盤的percentage busy (%b)也遠大於5%,同時average service time  (svc_t)也遠大於30milliseconds,這以下的措施需要被執行:

1.)調整應用,令其使用磁盤i/o更加有效率,可以通過修改磁盤隊列、使用應用服務器的cache

2.)將文件系統分佈到2個或多個磁盤上,並使用volume manager/disksuite的條帶化特點

3.) 增加系統參數值,如inode cache  , ufs_ninode。Increase the system parameter values for  inode cache  , ufs_ninode ,  which is  Number of inodes to be held in memory. Inodes are cached globally (for UFS), not on a per-file system basis 

4.) 將文件系統移到更快的磁盤/控制器,或者用更好的設備來代替


microblog.png?1轉發至微博
microblog.png?1轉發至微博

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章