1.iostat使用范圍
iostat命令可以生成3種類型的報告:
(1)CPU使用情況的報告
(2)設備使用情況的報告
(3)網絡文件系統(NFS)使用情況的報告
2.每種報告的格式說明
關於CPU使用報告的格式解釋:
%user:應用程序使用CPU的時間占比。
%nice:擁有高優先級的應用程序占用CPU的時間百分比。
默認情況下,所有應用程序的優先級一樣,所以CPU不會偏袒哪一個。但如果有的優先級高,CPU就會先
去執行它們,那么對於這群身份特殊的應用程序,我們用%nice來統計它們的CPU使用占比。
%system:內核程序使用CPU的時間占比。
%iowait:CPU花費了多少時間去等待磁盤IO。此時CPU是空閑的,什么事都不做。
%idle:CPU什么都不做,既沒有等待磁盤IO,也沒有做其他事情。完全空閑狀態。
%steal:之前管理程序服務於CPU1,突然CPU2跑來了,此時管理程序跟CPU1說:你等會哈,我先去服務CPU2,馬上回來。
此時,CPU1被強制置於等待狀態。CPU1等待的時間占比就是%steal。(個人理解)
關於設備使用報告的格式解釋:
tps:每秒發送給設備的傳輸數。這里的傳輸指的是:發給設備的一個I/O請求。
所以,tps的意思就是:每秒發給設備的I/O請求數。一個讀請求叫做一個I/0,一個寫請求也叫做一個I/O。
Blk_read/s:每秒從設備讀取的block數。每個block的大小是512字節,等於一個扇區的大小。
Blk_wrtn/s:每秒寫入到設備的block數。每個block的大小是512字節,等於一個扇區的大小。
Blk_read:從該設備讀取的總block數。發出去的block數。
Blk_wrtn:寫入到該設備的總block數。拿進來的block數。
kB_read/s:每秒從設備讀取的千字節數。kilobytes。
kB_wrtn/s:每秒寫入到設備的千字節數。kilobytes。
kB_read:從設備讀取的總千字節數。kilobytes。發出去的數據量。
kB_wrtn:寫入到該設備的總千字節數。kilobytes。拿進來的數據量。
MB_read/s:每秒從該設備讀出去的兆字節數。megabytes。
MB_wrtn/s:每秒寫入到該設備的兆字節數。megabytes。
MB_read:從該設備讀出去的總兆字節數。
MB_wrtn:寫入到該設備的總兆字節數。
rrqm/s:沒有理解,會查找資料來補充。
wrqm/s:沒有理解,會查找資料來補充。
r/s:每秒發送給設備的讀請求數。(重要指標)
w/s:每秒發送給設備的寫請求數。(重要指標)
rsec/s:每秒從這個設備讀取了多少個扇區。
wsec/s:每秒寫入了多少個扇區到該設備。
rkB/s:每秒從設備讀取的千字節數。kilobytes。(與前面的kB_read/s一樣)
wkB/s:每秒寫入到設備的千字節數。kilobytes。(與前面的kB_write/s一樣)
rMB/s:與上面類似。
wMB/s:與上面類似。
avgrq-sz:所有發送給設備的請求,都有大小。這個參數用於表示所有請求的平均大小,以扇區為單位。
avgqu-sz:假如第1秒,設備前的請求隊列中有5個請求;第2秒,設備前的隊列中有4個請求;
第3秒,設備前的請求隊列中有3個請求,那么現在我來計算,設備前的隊列,平均每秒是多長:
5 + 4 + 3 / 3 = 4。也就是平均每秒都有4個請求在排隊。
await:設備服務每個請求的平均時間。包括請求的排隊時間和實際服務時間。比如我去肯德基,
我的前面有4個人,排了15分鍾后,服務員開始給我服務。我點了漢堡和可樂,過
了5分鍾,服務員將漢堡和可樂交給了我,我拿着東西離開了。所以對於我這個人(請求),
肯德基的服務時間是20分鍾。單位是毫秒。
svctm:這個字段會在將來的sysstat安裝包中移除。所以不需要關注。(我們的iostat來自於sysstat這個安裝包)
%util:沒有理解,會查找資料來補充。
關於網絡文件系統報告:
NFS客戶端會掛載NFS服務端分享的設備,我們可以在NFS客戶端上統計我們使用NFS的情況。
Filesystem:指的是網絡文件系統。可以用ip:目錄或hostname:目錄表示。
比如:10.10.10.10:/data/image或者img.example.com:/data/image。
rBlk_nor/s:應用程序通過read()這個系統調用接口,從網絡文件系統中讀出來的block數,一個block的大小是512字節。
wBlk_nor/s:應用程序通過write()這個系統調用接口,寫入到網絡文件系統中的block數。
rBlk_dir/s:我們從某個打開的文件中讀取的block數。這個文件在網絡文件系統中,並且是以O_DIRECT標記打開的。
wBlk_dir/s:我們寫入到某個打開的文件中的block數。這個文件在網絡文件系統中,並且是以O_DIRECT標記打開的。
rBlk_svr/s:NFS客戶端通過NFS READ請求,從服務器讀取的block數。
wBlk_svr/s:NFS客戶端通過NFS WRITE請求,寫入到服務器的block數。
rkB_nor/s:應用程序通過read()這個系統調用接口,從網絡文件系統中讀出來千字節數。kilobytes。
wkB_nor/s:應用程序通過write()這個系統調用接口,寫入到網絡文件系統中的千字節數。kilobytes。
rkB_dir/s:我們從某個打開的文件中讀取的千字節數。這個文件在網絡文件系統中,並且是以O_DIRECT標記打開的。
wkB_dir/s:我們寫入到某個打開的文件中的千字節數。這個文件在網絡文件系統中,並且是以O_DIRECT標記打開的。
rkB_svr/s:NFS客戶端通過NFS READ請求,從服務器讀取的千字節數。
wkB_svr/s:NFS客戶端通過NFS WRITE請求,寫入到服務器的千字節數。
rMB_nor/s:同上,只是改了下單位。
wMB_nor/s:同上,只是改了下單位。
rMB_dir/s:同上,只是改了下單位。
wMB_dir/s:同上,只是改了下單位。
rMB_svr/s:同上,只是改了下單位。
wMB_svr/s:同上,只是改了下單位。
ops/s:每秒向文件系統發起的操作數。
rops/s:每秒向文件系統發起的讀操作數。
wops/s:每秒向文件系統發起的寫操作數。
總的來說,套路就是:block數,千字節數,兆字節數。
3.命令選項
iostat -c 只顯示CPU使用情況
iostat -d 只顯示設備使用情況
iostat -n 只顯示網絡文件系統使用情況
iostat -k 以千字節顯示,沒有加k時,是以block數顯示的
iostat -m 以兆字節顯示,沒有加m時,是以block數顯示的
iostat -N 查看LVM2時比較有用
iostat -j { ID | LABEL | PATH | UUID} [ device | ALL ] 沒理解,待查資料。
iostat -p [ { device | ALL } ] 顯示塊設備的統計信息以及它的分區的統計信息,比如sda塊設備和它的分區sda1。
iostat -t 顯示每次打印的時間
iostat -V 打印sysstat的版本
iostat -x 展示擴展統計數據,需要參考/proc/diskstat文件和/proc/partions文件
iostat -y 忽略第一次報告(第一次統計數據是從系統啟動后算起的),從第二次開始顯示
iostat -z 忽略那些在取樣期間,沒有任何活動的設備統計數據。也就是說,如果設備沒有任何寫入和讀取,那么無須統計它的數據
4.注意事項
/proc文件系統必須要掛載上,iostat才可以工作。
svctm:平均服務時間,這個字段以后將沒有意義。因為I/O統計數據是在block層計算的,我們並不知道磁盤驅動器什么時候開始處理一個請求。
5.附加文件
/proc/stat包含系統統計數據。
/proc/uptime包含系統運行時間。
/proc/diskstats包含磁盤統計數據。
/sys包含塊設備的統計數據。
/proc/self/mountstats包含網絡文件系統的統計數據。
/dev/disk包含持久設備名
6.其余參考命令
sar
pidstat
mpstat
vmstat
