Linux的IO性能監(jiān)控iostat詳解

1.iostat常用命令格式如下:

iostat [參數(shù)] [時(shí)間] [次數(shù)]

命令參數(shù)說明如下:
-c 顯示CPU使用情況
-d 顯示磁盤使用情況
-k 以K為單位顯示
-m 以M為單位顯示
-N 顯示磁盤陣列(LVM) 信息
-n 顯示NFS使用情況
-p 可以報(bào)告出每塊磁盤的每個(gè)分區(qū)的使用情況
-t 顯示終端和CPU的信息
-x 顯示詳細(xì)信息

2.基本使用 iostat -d -k 2 3 或 iostat -dk 2 3
參數(shù)
-d 表示,顯示設(shè)備(磁盤)使用狀態(tài);
-k某些使用block為單位的列強(qiáng)制使用Kilobytes為單位;
2 3表示,數(shù)據(jù)顯示每隔2秒刷新一次,共顯示3次 【第一次數(shù)據(jù)忽略】

Linux 3.10.0-862.el7.x86_64 (ORACLE122.COM)     07/30/2021  _x86_64_    (16 CPU)
#以下第一段 忽略
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda             545.83       694.65      2111.48 5519125437 16776045012
dm-0            292.09       694.60      2111.24 5518687672 16774151148
dm-1              0.07         0.05         0.23     408840    1840520
dm-2              0.00         0.00         0.00      15312      35828

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda             309.00         4.00      1228.00          8       2456
dm-0            155.00         4.00      1228.00          8       2456
dm-1              0.00         0.00         0.00          0          0
dm-2              0.00         0.00         0.00          0          0

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda             353.00         0.00      1068.00          0       2136
dm-0            177.00         0.00      1068.00          0       2136
dm-1              0.00         0.00         0.00          0          0
dm-2              0.00         0.00         0.00          0          0

tps:每秒I/O數(shù)(即IOPS。磁盤連續(xù)讀和連續(xù)寫之和)
kB_read/s:每秒從設(shè)備(drive expressed)讀取的數(shù)據(jù)量;
kB_wrtn/s:每秒向設(shè)備(drive expressed)寫入的數(shù)據(jù)量;
kB_read:讀取的總數(shù)據(jù)量;
kB_wrtn:寫入的總數(shù)據(jù)量;這些單位都為Kilobytes。

上面的例子中,我們可以看到磁盤sda以及它的各個(gè)分區(qū)的統(tǒng)計(jì)數(shù)據(jù),當(dāng)時(shí)統(tǒng)計(jì)的磁盤sda總TPS是309-353,下面是各個(gè)分區(qū)的TPS。
(因?yàn)槭撬查g值,所以總TPS并不嚴(yán)格等于各個(gè)分區(qū)TPS的總和)

  1. 顯示詳細(xì)信息 iostat -xdk 2 3
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.18     0.18   34.68  511.18   694.73  2111.67    10.28     0.25    0.46    4.67    0.18   0.25  13.46
dm-0              0.00     0.00   34.85  257.26   694.67  2111.44    19.21     0.09    0.30    4.68    1.81   0.46  13.41
dm-1              0.00     0.00    0.01    0.06     0.05     0.23     8.01     0.00   42.81   12.10   49.60   4.70   0.03
dm-2              0.00     0.00    0.00    0.00     0.00     0.00    20.02     0.00    9.50    8.50    9.89   7.01   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00  602.00     0.00  1728.00     5.74     0.17    0.28    0.00    0.28   0.16   9.50
dm-0              0.00     0.00    0.00  302.00     0.00  1728.00    11.44     0.10    0.32    0.00    0.32   0.32   9.55
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-2              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    4.50  350.00    48.00   970.00     5.74     0.09    0.24    5.00    0.18   0.10   3.65
dm-0              0.00     0.00    4.50  175.00    48.00   970.00    11.34     0.06    0.32    5.00    0.20   0.21   3.80
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-2              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

%util:代表磁盤繁忙程度。100% 表示磁盤繁忙, 0%表示磁盤空閑。

%util:在統(tǒng)計(jì)時(shí)間內(nèi)所有處理IO時(shí)間,除以總共統(tǒng)計(jì)時(shí)間。例如,如果統(tǒng)計(jì)間隔1秒【本次案例是2秒】,該設(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ā)能力,所以磁盤使用未必就到了瓶頸)

await:IO請(qǐng)求的處理的平均時(shí)間(單位:毫秒)。這里可以理解為IO的響應(yīng)時(shí)間,一般地系統(tǒng)IO響應(yīng)時(shí)間應(yīng)該低于5ms,如果大于10ms就比較大了

r_await:每個(gè)讀操作平均所需的時(shí)間;不僅包括硬盤設(shè)備讀操作的時(shí)間,還包括了在kernel隊(duì)列中等待的時(shí)間

w_await:每個(gè)寫操作平均所需的時(shí)間;不僅包括硬盤設(shè)備寫操作的時(shí)間,還包括了在kernel隊(duì)列中等待的時(shí)間

rrqm/s:每秒這個(gè)設(shè)備相關(guān)的讀取請(qǐng)求有多少被Merge了(當(dāng)系統(tǒng)調(diào)用需要讀取數(shù)據(jù)的時(shí)候,VFS將請(qǐng)求發(fā)到各個(gè)FS,如果FS發(fā)現(xiàn)不同的讀取請(qǐng)求讀取的是相同Block的數(shù)據(jù),F(xiàn)S會(huì)將這個(gè)請(qǐng)求合并Merge);wrqm/s:每秒這個(gè)設(shè)備相關(guān)的寫入請(qǐng)求有多少被Merge了。
rrqm/s: 每秒進(jìn)行 merge 的讀操作數(shù)目.即 delta(rmerge)/s
wrqm/s: 每秒進(jìn)行 merge 的寫操作數(shù)目.即 delta(wmerge)/s
r/s: 每秒完成的讀 I/O 設(shè)備次數(shù).即 delta(rio)/s
w/s: 每秒完成的寫 I/O 設(shè)備次數(shù).即 delta(wio)/s
rsec/s: 每秒讀扇區(qū)數(shù).即 delta(rsect)/s
wsec/s: 每秒寫扇區(qū)數(shù).即 delta(wsect)/s
rkB/s: 每秒讀K字節(jié)數(shù).是 rsect/s 的一半,因?yàn)槊可葏^(qū)大小為512字節(jié).(需要計(jì)算)
wkB/s: 每秒寫K字節(jié)數(shù).是 wsect/s 的一半.(需要計(jì)算)
avgrq-sz: 平均每次設(shè)備I/O操作的數(shù)據(jù)大小 (扇區(qū)).delta(rsect+wsect)/delta(rio+wio)
avgqu-sz: 平均I/O隊(duì)列長(zhǎng)度.即 delta(aveq)/s/1000 (因?yàn)閍veq的單位為毫秒).
await: 平均每次設(shè)備I/O操作的等待時(shí)間 (毫秒).即 delta(ruse+wuse)/delta(rio+wio)
svctm: 平均每次設(shè)備I/O操作的服務(wù)時(shí)間 (毫秒).即 delta(use)/delta(rio+wio)

4.獲取cpu部分狀態(tài)值 iostat -c 2 3

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          16.62    0.00    1.52    1.10    0.00   80.77

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          22.62    0.00    9.71    0.38    0.00   67.29

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          19.15    0.00    5.57    0.50    0.00   74.77

cpu屬性值說明:
%user:CPU處在用戶模式下的時(shí)間百分比。
%nice:CPU處在帶NICE值的用戶模式下的時(shí)間百分比。
%system:CPU處在系統(tǒng)模式下的時(shí)間百分比。
%iowait:CPU等待輸入輸出完成時(shí)間的百分比。
%steal:管理程序維護(hù)另一個(gè)虛擬處理器時(shí),虛擬CPU的無意識(shí)等待時(shí)間百分比。
%idle:CPU空閑時(shí)間百分比。

如果%iowait的值過高,表示硬盤存在I/O瓶頸
如果%idle值高,表示CPU較空閑
如果%idle值高但系統(tǒng)響應(yīng)慢時(shí),可能是CPU等待分配內(nèi)存,應(yīng)加大內(nèi)存容量。
如果%idle值持續(xù)低于10,表明CPU處理能力相對(duì)較低,系統(tǒng)中最需要解決的資源是CPU。

  1. 以上參數(shù)綜合應(yīng)用 iostat -cxdk 2 3 【去掉最後的 3 則每隔2秒刷一次 = 實(shí)時(shí)監(jiān)控】
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          16.62    0.00    1.52    1.10    0.00   80.77

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.18     0.18   34.68  511.17   694.60  2111.55    10.28     0.25    0.47    4.68    0.18   0.25  13.46
dm-0              0.00     0.00   34.84  257.25   694.55  2111.32    19.21     0.09    0.30    4.68    1.81   0.46  13.41
dm-1              0.00     0.00    0.01    0.06     0.05     0.23     8.01     0.00   42.81   12.10   49.60   4.70   0.03
dm-2              0.00     0.00    0.00    0.00     0.00     0.00    20.02     0.00    9.50    8.50    9.89   7.01   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          12.16    0.00    2.24    0.35    0.00   85.24

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00  394.00     0.00   916.00     4.65     0.14    0.35    0.00    0.35   0.16   6.20
dm-0              0.00     0.00    0.00  197.00     0.00   916.00     9.30     0.07    0.34    0.00    0.34   0.33   6.45
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-2              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           9.11    0.00    1.51    0.38    0.00   89.00

Device:    r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda        1.00  322.50    48.00   796.00     5.22     0.14    0.42    6.00    0.40   0.21   6.70
dm-0       1.00  161.50    48.00   796.00    10.39     0.07    0.45    6.00    0.41   0.40   6.55
dm-1       0.00    0.00    0.00     0.00      0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-2       0.00    0.00    0.00     0.00      0.00     0.00    0.00    0.00    0.00   0.00   0.00

I/O 系統(tǒng)也和超市排隊(duì)有很多類似之處:
r/s+w/s 類似于交款人的總數(shù)
平均隊(duì)列長(zhǎng)度(avgqu-sz)類似于單位時(shí)間里平均排隊(duì)人的個(gè)數(shù)
平均服務(wù)時(shí)間(svctm:毫秒)類似于收銀員的收款速度(收銀員平均收銀耗時(shí)) 應(yīng)該 < await
平均等待時(shí)間(await:毫秒)類似于平均每人的等待時(shí)間
平均I/O數(shù)據(jù)(avgrq-sz)類似于平均每人所買的東西多少
I/O 操作率 (%util)類似于收款臺(tái)前有人排隊(duì)的時(shí)間比例.
我們可以根據(jù)這些數(shù)據(jù)分析出 I/O 請(qǐng)求的模式,以及 I/O 的速度和響應(yīng)時(shí)間.

  1. 總結(jié)
    如果 %util 接近 100%,說明產(chǎn)生的I/O請(qǐng)求太多,I/O系統(tǒng)已經(jīng)滿負(fù)荷,該磁盤可能存在瓶頸.

idle小于70% IO壓力就較大了,一般讀取速度有較多的wait. 同時(shí)可以結(jié)合vmstat 查看查看b參數(shù)(等待資源的進(jìn)程數(shù))和wa參數(shù)(IO等待所占用的CPU時(shí)間的百分比,高過30%時(shí)IO壓力高)

另外 await 的參數(shù)也要多和 svctm 來參考.差的過高就一定有 IO 的問題.svctm(收銀耗時(shí)小) 但 await(顧客等待時(shí)間長(zhǎng)) 不合理

avgqu-sz (平均每人所買的東西多少) 也是個(gè)做 IO 調(diào)優(yōu)時(shí)需要注意的地方,這個(gè)就是直接每次操作的數(shù)據(jù)的大小,如果次數(shù)多,但數(shù)據(jù)拿的小的話,其實(shí) IO 也會(huì)很小.如果數(shù)據(jù)拿的大,才IO 的數(shù)據(jù)會(huì)高.也可以通過 avgqu-sz × ( r/s or w/s ) = rsec/s or wsec/s.也就是講,讀定速度是這個(gè)來決定的.

另外還可以參考
svctm 一般要小于 await (因?yàn)橥瑫r(shí)等待的請(qǐng)求的等待時(shí)間被重復(fù)計(jì)算了),svctm 的大小一般和磁盤性能有關(guān),CPU/內(nèi)存的負(fù)荷也會(huì)對(duì)其有影響,請(qǐng)求過多也會(huì)間接導(dǎo)致 svctm 的增加.await 的大小一般取決于服務(wù)時(shí)間(svctm) 以及 I/O 隊(duì)列的長(zhǎng)度和 I/O 請(qǐng)求的發(fā)出模式.

如果 svctm 比較接近 await,說明 I/O 幾乎沒有等待時(shí)間;如果 await 遠(yuǎn)大于 svctm,說明 I/O 隊(duì)列太長(zhǎng),應(yīng)用得到的響應(yīng)時(shí)間變慢,如果響應(yīng)時(shí)間超過了用戶可以容許的范圍,這時(shí)可以考慮更換更快的磁盤,調(diào)整內(nèi)核 elevator 算法,優(yōu)化應(yīng)用,或者升級(jí) CPU.
隊(duì)列長(zhǎng)度(avgqu-sz)也可作為衡量系統(tǒng) I/O 負(fù)荷的指標(biāo),但由于 avgqu-sz 是按照單位時(shí)間的平均值,所以不能反映瞬間的 I/O 洪水.

別人一個(gè)不錯(cuò)的例子.(I/O 系統(tǒng) vs. 超市排隊(duì))
我們?cè)诔信抨?duì)時(shí),怎么決定該去哪個(gè)交款臺(tái)呢? 首當(dāng)是看排的隊(duì)人數(shù),5個(gè)人總比20人要快吧? 除了數(shù)人頭,我們也常??纯辞懊嫒速?gòu)買的東西多少,如果前面有個(gè)采購(gòu)了一星期食品的大媽,那么可以考慮換個(gè)隊(duì)排了.還有就是收銀員的速度了,如果碰上了連 錢都點(diǎn)不清楚的新手,那就有的等了.另外,時(shí)機(jī)也很重要,可能 5 分鐘前還人滿為患的收款臺(tái),現(xiàn)在已是人去樓空,這時(shí)候交款可是很爽啊,當(dāng)然,前提是那過去的 5 分鐘里所做的事情比排隊(duì)要有意義 (不過我還沒發(fā)現(xiàn)什么事情比排隊(duì)還無聊的).

最后,除了關(guān)注指標(biāo)外,我們更需要結(jié)合部署的業(yè)務(wù)進(jìn)行分析。對(duì)于磁盤隨機(jī)讀寫頻繁的業(yè)務(wù),
比如圖片存取、數(shù)據(jù)庫(kù)、郵件服務(wù)器等,此類業(yè)務(wù)嗎,tps才是關(guān)鍵點(diǎn)。對(duì)于順序讀寫頻繁的業(yè)務(wù),
需要傳輸大塊數(shù)據(jù)的,如視頻點(diǎn)播、文件同步,關(guān)注的是磁盤的吞吐量。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容