kafka集群搭建完成后,對集群進(jìn)行壓測。這樣的話,就需要實(shí)時查看kafka集群機(jī)器的IO情況。那怎么辦呢?其實(shí)linux是有一個命令來做這個事兒的。這個命令就是iostat。下面將詳細(xì)介紹一下這個命令。
- 用途
iostat用于輸出CPU和磁盤I/O相關(guān)的統(tǒng)計(jì)信息。

如果%iowait的值過高,表示硬盤存在I/O瓶頸
如果%idle值高,表示CPU較空閑
如果%idle值高但系統(tǒng)響應(yīng)慢時,可能是CPU等待分配內(nèi)存,應(yīng)加大內(nèi)存容量。
如果%idle值持續(xù)低于10,表明CPU處理能力相對較低,系統(tǒng)中最需要解決的資源是CPU。
2、深層理解
iostat數(shù)據(jù)來自哪里呢???其實(shí)這些數(shù)據(jù)來自/proc/diskstats

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

在sdb這塊磁盤上:
?每秒向磁盤上寫3M【3164.76kb】左右數(shù)據(jù)(wkB/s值)
?每秒有8次IO操作(r/s+w/s),其中以寫操作為主體
?平均每次IO請求等待時間(await)為2516.95毫秒,處理時間為19.14毫秒
?等待處理的IO請求隊(duì)列(avgqu-sz)中,平均有20.51個請求駐留
-d:僅顯示磁盤統(tǒng)計(jì)信息,與-c選項(xiàng)互斥

-k:以K為單位顯示每秒的磁盤請求數(shù),默認(rèn)單位塊

-c:僅顯示CPU統(tǒng)計(jì)信息,與-d選項(xiàng)互斥

2)其他參數(shù)講解
-m:用“mbytes/秒”代替“塊/秒”顯示統(tǒng)計(jì)信息

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

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

-h:可讀性更好的NFS目錄信息統(tǒng)計(jì)

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

指標(biāo)解釋:
kB_read/s:每秒從驅(qū)動器讀入的數(shù)據(jù)量,單位為K.
kB_wrtn/s:每秒向驅(qū)動器寫入的數(shù)據(jù)量,單位為K
kB_read:讀入的數(shù)據(jù)總量,單位為K.
kB_wrtn:寫入的數(shù)據(jù)總量,單位為K.
rrqm/s:將讀入請求合并后,每秒發(fā)送到設(shè)備的讀入請求數(shù).
wrqm/s:將寫入請求合并后,每秒發(fā)送到設(shè)備的寫入請求數(shù).
(2)iostat -x -d -k 1 10
查看磁盤統(tǒng)計(jì)信息及擴(kuò)展信息(磁盤讀寫速度單位為KB),每1s刷新 ,刷新10次結(jié)束

在sdb這塊磁盤上,第2s時:
?每秒向磁盤上寫24M【24064.00kb】左右數(shù)據(jù)(wkB/s值)
?每秒有47次IO操作(r/s+w/s),全部是寫入操作
?平均每次IO請求等待時間(await)為4100.83ms,處理時間為21.30ms
?等待處理的IO請求隊(duì)列(avgqu-sz)中,平均有90.33個請求駐留
來一個簡單的計(jì)算:%util = (r/s+w/s) * (svctm/1000)
上圖中:%util =(0+47) * (21.30/1000) = 1.0011
與圖中顯示的結(jié)果是一致的。
指標(biāo)解釋:
rrqm/s:每秒對該設(shè)備的讀請求被合并次數(shù),文件系統(tǒng)會對讀取同塊(block)的請求進(jìn)行合并;
wrqm/s:每秒對該設(shè)備的寫請求被合并次數(shù)。
rsec/s:每秒完成的讀次數(shù);
wsec/:每秒完成的寫次數(shù)。
rKB/s:每秒讀數(shù)據(jù)量(kB為單位);
wKB/s:每秒寫數(shù)據(jù)量(kB為單位);
avgrq-sz:平均每次IO操作的數(shù)據(jù)量(扇區(qū)數(shù)為單位)
avgqu-sz:平均等待處理的IO請求隊(duì)列長度,隊(duì)列長度越短越好。
await:每一個IO請求的處理的平均時間(單位是微秒毫秒)。這里可以理解為IO的
響應(yīng)時間,一般 地系統(tǒng)IO響應(yīng)時間應(yīng)該低于5ms,如果大于10ms就比較大 了。這個時間包括了隊(duì)列時間和服務(wù)時間,也就是說,一般情況下,await大于svctm,它們的差值越小,則說明隊(duì)列時間越短, 反之差值越大,隊(duì)列時間越長,說明系統(tǒng)出了問題。
svctm:表示平均每次設(shè)備I/O操作的服務(wù)時間(以毫秒為單位)。如果svctm的值與await很接近,表 示幾乎沒有I/O等待,磁盤性能很好,如果await的值遠(yuǎn)高于svctm的值,則表示I/O隊(duì)列等待太 長,系統(tǒng)上運(yùn)行的應(yīng)用程序?qū)⒆兟?br>
%util: 在統(tǒng)計(jì)時間內(nèi)所有處理IO時間,除以總共統(tǒng)計(jì)時間。例如,如果統(tǒng)計(jì)間隔1秒,該設(shè)備有0.8 秒在處理IO,而0.2秒閑置,那么該設(shè)備的%util = 0.8/1 = 80%,所以該參數(shù)暗示了設(shè)備的繁 忙程度。一般地,如果該參數(shù)是100%表示設(shè)備已經(jīng)接近滿負(fù)荷運(yùn)行了(當(dāng)然如果是多磁盤,即使%util是100%,因?yàn)榇疟P的并發(fā)能力,所以磁盤使用未必就到了瓶頸)。
參考博客:
https://www.cnblogs.com/gaoyuechen/p/8075421.html
https://blog.csdn.net/bingtang5/article/details/84611839
https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858810.html