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的總和)
- 顯示詳細(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。
- 以上參數(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í)間.
- 總結(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)注的是磁盤的吞吐量。