iostat對磁盤IO情況實時監控

  1. 用途
    iostat用於輸出CPU和磁盤I/O相關的統計信息。

iostat.png

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

2、深層理解
iostat數據來自哪裏呢???其實這些數據來自/proc/diskstats

diskstats.png

指標講解可以參照這個:https://www.kernel.org/doc/Documentation/iostats.txt
我們以紅色方框的這條數據爲例來講解:
8:主設備號;
16:從設備號
sdb:設備名
從第4個數據開始,是一系列指標信息:
974:(rd_ios) 讀操作的次數
0:(rd_merges)合併讀操作的次數。如果兩個讀操作讀取相鄰的數據塊,那麼可以被合併成1個。
686058:(rd_sectors)讀取的扇區數量
36129:(rd_ticks)讀操作消耗的時間(以毫秒爲單位)。每個讀操作從__make_request()開始計時,到end_that_request_last()爲止,包括了在隊列中等待的時間。
1231707:(wr_ios)寫操作的次數
41463:(wr_merges)合併寫操作的次數
996643025:(wr_sectors)寫入的扇區數量
3166420811:(wr_ticks)寫操作消耗的時間(以毫秒爲單位)
0:(in_flight): 當前未完成的I/O數量。在I/O請求進入隊列時該值加1,在I/O結束時該值減1。 注意:是I/O請求進入隊列時,而不是提交給硬盤設備時。
27884188:(io_ticks)該設備用於處理I/O的自然時間(wall-clock time)
3166454597:(time_in_queue)對字段#10(io_ticks)的加權值

  1. 參數講解
    1)常用參數講解
    -x:輸出擴展信息。

iostat-x.png

在sdb這塊磁盤上:
❉每秒向磁盤上寫3M【3164.76kb】左右數據(wkB/s值)
❉每秒有8次IO操作(r/s+w/s),其中以寫操作爲主體
❉平均每次IO請求等待時間(await)爲2516.95毫秒,處理時間爲19.14毫秒
❉等待處理的IO請求隊列(avgqu-sz)中,平均有20.51個請求駐留

-d:僅顯示磁盤統計信息,與-c選項互斥

iostat-d.png

-k:以K爲單位顯示每秒的磁盤請求數,默認單位塊

iostat-k.png

-c:僅顯示CPU統計信息,與-d選項互斥

iostat-c.png

2)其他參數講解
-m:用“mbytes/秒”代替“塊/秒”顯示統計信息

iostat-m.png

-t:顯示終端和CPU的信息

iostat-t.png

-N:顯示磁盤陣列(LVM) 信息

iostat-N.png

-h:可讀性更好的NFS目錄信息統計

iostat-h.png

  1. 實踐
    (1)iostat -d -k 1 10
    查看TPS和吞吐量信息(磁盤讀寫速度單位爲KB),每1s刷新 ,刷新10次結束

iostat-d-k-1-10.png

指標解釋:
kB_read/s:每秒從驅動器讀入的數據量,單位爲K.
kB_wrtn/s:每秒向驅動器寫入的數據量,單位爲K
kB_read:讀入的數據總量,單位爲K.
kB_wrtn:寫入的數據總量,單位爲K.
rrqm/s:將讀入請求合併後,每秒發送到設備的讀入請求數.
wrqm/s:將寫入請求合併後,每秒發送到設備的寫入請求數.

(2)iostat -x -d -k 1 10
查看磁盤統計信息及擴展信息(磁盤讀寫速度單位爲KB),每1s刷新 ,刷新10次結束

iostat-x-d-k-1-10.png

在sdb這塊磁盤上,第2s時:
❉每秒向磁盤上寫24M【24064.00kb】左右數據(wkB/s值)
❉每秒有47次IO操作(r/s+w/s),全部是寫入操作
❉平均每次IO請求等待時間(await)爲4100.83ms,處理時間爲21.30ms
❉等待處理的IO請求隊列(avgqu-sz)中,平均有90.33個請求駐留
來一個簡單的計算:%util = (r/s+w/s) * (svctm/1000)
上圖中:%util =(0+47) * (21.30/1000) = 1.0011
與圖中顯示的結果是一致的。

指標解釋:
rrqm/s:每秒對該設備的讀請求被合併次數,文件系統會對讀取同塊(block)的請求進行合併;
wrqm/s:每秒對該設備的寫請求被合併次數。
rsec/s:每秒完成的讀次數;
wsec/:每秒完成的寫次數。
rKB/s:每秒讀數據量(kB爲單位);
wKB/s:每秒寫數據量(kB爲單位);
avgrq-sz:平均每次IO操作的數據量(扇區數爲單位)
avgqu-sz:平均等待處理的IO請求隊列長度,隊列長度越短越好。
await:每一個IO請求的處理的平均時間(單位是微秒毫秒)。這裏可以理解爲IO的
響應時間,一般 地系統IO響應時間應該低於5ms,如果大於10ms就比較大 了。這個時間包括了隊列時間和服務時間,也就是說,一般情況下,await大於svctm,它們的差值越小,則說明隊列時間越短, 反之差值越大,隊列時間越長,說明系統出了問題。
svctm:表示平均每次設備I/O操作的服務時間(以毫秒爲單位)。如果svctm的值與await很接近,表 示幾乎沒有I/O等待,磁盤性能很好,如果await的值遠高於svctm的值,則表示I/O隊列等待太 長,系統上運行的應用程序將變慢。
%util: 在統計時間內所有處理IO時間,除以總共統計時間。例如,如果統計間隔1秒,該設備有0.8 秒在處理IO,而0.2秒閒置,那麼該設備的%util = 0.8/1 = 80%,所以該參數暗示了設備的繁 忙程度。一般地,如果該參數是100%表示設備已經接近滿負荷運行了(當然如果是多磁盤,即使%util是100%,因爲磁盤的併發能力,所以磁盤使用未必就到了瓶頸)。



作者:LearnBigData
鏈接:https://www.jianshu.com/p/8de26d7a9c18
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

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