iostat命令產(chǎn)生三類數(shù)據(jù)報(bào)表: cpu使用率、設(shè)備使用率、網(wǎng)絡(luò)文件系統(tǒng)使用。下面先看一下前面兩個(gè)數(shù)據(jù)指標(biāo)的定義,以及如何幫助性能調(diào)優(yōu)上發(fā)現(xiàn)問(wèn)題點(diǎn)。
CPU使用率:
%user, 用戶態(tài)的代碼cpu執(zhí)行時(shí)間占比
%nice, 帶有nice優(yōu)先級(jí)的用戶態(tài)代碼cpu使用時(shí)間占比
%system,內(nèi)核態(tài)代碼cpu使用占比
%iowait, 等待外部io的過(guò)程中,cpu空閑的時(shí)間占比
%steal,管理程序維護(hù)另一個(gè)虛擬處理器時(shí),虛擬CPU的無(wú)意識(shí)等待時(shí)間百分比
%idle,cpu空閑時(shí)間占比
設(shè)備使用率:
tps, transfer per second,每秒io 請(qǐng)求個(gè)數(shù)
blk_read/s 每秒讀的block的個(gè)數(shù)
blk_wrtn/s,每秒寫的block的個(gè)數(shù)
blk_read,總共的讀的block的個(gè)數(shù)
blk_wrtn,總共的寫的block的個(gè)數(shù)
kb_read/s,每秒讀的kb個(gè)數(shù)
kb_wrtn/s,每秒寫的kb個(gè)數(shù)
mb_read/s,每秒讀的mb個(gè)數(shù)
mb_wrtn/s每秒寫的mb個(gè)數(shù)
mb_read,總共讀的mb個(gè)數(shù)
mb_wrtn,總共寫的mb個(gè)數(shù)
rrqm/s,read request mereded were queue , 每秒排隊(duì)的合并的讀請(qǐng)求
wrqm/s,每秒排隊(duì)的合并的寫請(qǐng)求
r/s,每秒發(fā)布的讀請(qǐng)求
w/s,每秒發(fā)布的寫請(qǐng)求
rsec/s,每秒讀的扇區(qū)的個(gè)數(shù)
wsec/s,每秒寫的扇區(qū)的個(gè)數(shù)
rKb/s,每秒讀的kb
wKb/s,每秒寫的kb
avgrq-sz,發(fā)布的請(qǐng)求的平均大小,以扇區(qū)為單位
avggqu-sz,發(fā)布的請(qǐng)求的平均隊(duì)列大小
await,平均io的時(shí)間,包括在隊(duì)列中的時(shí)間,和實(shí)際執(zhí)行的時(shí)間
utils,設(shè)備利用率,如果接近100,說(shuō)明設(shè)備負(fù)載飽和
案例1

? ? ? 上面這個(gè)案例,查看是磁盤sda的性能情況。io寫的指標(biāo)w_await,平均耗時(shí)6ms,讀平均耗時(shí)是5.33ms,磁盤使用率是1.04%,對(duì)于5200轉(zhuǎn)速的硬盤來(lái)講,這個(gè)性能數(shù)據(jù)看起來(lái)還可以。但是有一個(gè)地方有問(wèn)題:cpu花在內(nèi)核執(zhí)行時(shí)間占比居然達(dá)到37.89%,超過(guò)用戶占比23.45%。如果該機(jī)器上,還有別的程序在做io的事情,也許還可理解,但是如果只有被監(jiān)測(cè)的目標(biāo)程序一個(gè),可能需要分析原因了。
? ? 有兩個(gè)指標(biāo)也可能提供了一些線索,w/s, wrqm/s,每秒寫的請(qǐng)求個(gè)數(shù)和每秒進(jìn)入寫隊(duì)列的請(qǐng)求個(gè)數(shù)。相對(duì)于wMB/s的0.14,每秒寫0.14MB,但是io寫的還是慢了。剛才提了,如果硬盤是5200轉(zhuǎn)速的話,且有w_await佐證,單次io執(zhí)行的速度并不慢,所以得需要看一下應(yīng)用程序是如何進(jìn)行io的。比如如果應(yīng)用程序從用戶態(tài)copy到內(nèi)核態(tài),然后再進(jìn)行真正io,或者在內(nèi)核態(tài)做了很多事情,都有可能導(dǎo)致這樣的情況。
案例2:

? ? 從這個(gè)圖中,我們可以看到,磁盤使用率是飽和狀態(tài),達(dá)到了100%,寫的平均耗時(shí)超過(guò)了871ms,隊(duì)列中io請(qǐng)求個(gè)數(shù)超過(guò)1010,每秒寫81M的數(shù)據(jù)。因?yàn)榇疟P負(fù)荷飽和,io執(zhí)行時(shí)間過(guò)長(zhǎng),導(dǎo)致CPU因?yàn)榈却齣o而空閑,空閑時(shí)間占比超過(guò)了47.89%。為了改善性能,需要從應(yīng)用程序?qū)用嫦朕k法降低IO的數(shù)據(jù)量,比如數(shù)據(jù)緩存在內(nèi)存里(如page cache)、后臺(tái)異步方式落盤等等策略。
小結(jié)
? ? 對(duì)于io密集型的應(yīng)用或者任務(wù),需要密切關(guān)注io操作對(duì)性能的影響。掌握iostat,理解背后的指標(biāo)意義,針對(duì)不同的類型的IO性能問(wèn)題,進(jìn)行分析,對(duì)癥下藥找到不同的解決方案。