http://zlbzhu.blog.51cto.com/1413424/758973
Linux系統出現了性能問題,一般我們可以通過top、iostat、free、vmstat等命令 來查看初步定位問題。其中iostat可以給我們提供豐富的IO狀態數據。
1. 基本使用
參數 -d 表示,顯示設備(磁盤)使用狀態;-k某些使用block爲單位的列強制使用Kilobytes爲單位;1 10表示,數據顯示每隔1秒刷新一次,共顯示10次。
tps :該設備每秒的傳輸次數(Indicate the number of transfers per second that were issued to the device.)。“一次傳輸”意思是“一次I/O請求”。多個邏輯請求可能會被合併爲“一次I/O請求”。“一次傳輸”請求的大小是未知的。
kB_read/s :每秒從設備(drive expressed)讀取的數據量;kB_wrtn/s :每秒向設備(drive expressed)寫入的數據量;kB_read :讀取的總數據量;kB_wrtn :寫入 的總數量數據量;這些單位都爲Kilobytes。
上面的例子中,我們可以看到磁盤sda以及它的各個分區的統計數據,當時統計的磁盤總TPS是39.29,下面是各個分區的TPS。(因爲是瞬間 值,所以總TPS並不嚴格等於各個分區TPS的總和)
2. -x 參數
使用-x參數我們可以獲得更多統計信息。
rrqm/s :每秒這個設備相關的讀取請求有多少被Merge了(當系統調用需要讀取 數據的 時候,VFS將請求發到各個FS,如果FS發現不同的讀取請求讀取的是相同Block的數據,FS會將這個請求合併Merge);wrqm/s:每秒這個 設備相關的寫入請求有多少被Merge了。
rsec/s :每秒讀取的扇區數;wsec/ : 每秒寫入的扇區數。r/s :The number of read requests that were issued to the device per second;w/s :The number of write requests that were issued to the device per second;
await :每一個IO請求的處理的平均時間(單位是微秒)。這裏可以理解爲IO的響應時 間,一般地系統IO響應時間應該低於5ms,如果大於10ms就比較大了。
%util :在統計時間內所有處理IO時間,除以總共統計時間。例如,如果統計間隔1 秒,該 設備有0.8秒在處理IO,而0.2秒閒置,那麼該設備的%util = 0.8/1 = 80%,所以該參數暗示了設備的繁忙程度。一般地,如果該參數是100%表示設備已經接近滿負荷運行了(當然如果是多磁盤,即使%util是100%,因 爲磁盤的併發能力,所以磁盤使用未必就到了瓶頸)。
3. -c 參數
iostat還可以用來獲取cpu部分狀態值:
4. 常見用法
5. 實例分析
上面看到,磁盤每秒傳輸次數平均約400;每秒磁盤讀取約5MB,寫入約1MB。
可以看到磁盤的平均響應時間<5ms,磁盤使用率>80。磁盤響應正常,但是已經很繁忙了。
參考文獻:
- Linux man iostat
- How Linux iostat computes its results
- Linux iostat
最近要對分佈式集羣做一些性能測試,其中一個很重要的項就是測試hadoop分佈式集羣在支持多磁盤輪轉 寫入的時候在各種磁盤配置的情況下的讀寫性能,如 在RAID0,RAID5和JBOD情況下的磁盤性能,所以linux
下的iostat命令就在產生report的腳本中非常有用,特此記錄下iostat命令的一些使用筆 記
:
[命令:] iostat [-c|-d] [-k] [-t] [間隔描述] [檢測次數]
參 數:
-c : 僅顯示cpu的狀態
-d : 僅顯示存儲設備的狀態,不可以和-c一起使用
-k : 默認顯示的是讀入讀出的block信息,用-k可以改成KB大小來顯示
-t : 顯示日期
-p device | ALL : device爲某個設備或者某個分區,如果使用ALL,就表示要顯示所有分區和設備的信息
顯示示例:
avg-cpu: %user %nice %sys %iowait %idle
4.55 0.00 0.63 0.26 94.56
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
cciss/c0d0 30.11 68.20 67.13 1232784060 1213452142
cciss/c0d0p1 0.00 0.00 0.00 2531 2
cciss/c0d0p2 83.78 68.18 67.11 1232572011 1213204536
dm-0 1.06 0.60 4.07 10873201 73555720
dm-1 82.50 67.42 62.23 1218704309 1124966656
dm-2 0.21 0.18 0.83 3199605 14929540
dm-3 0.00 0.00 0.00 372 224
以上顯示分爲上下兩個部 分,上半部分顯示CPU的信息,下面的數 據
顯示存儲設備的相關數據,它的數據意義如下:
tps:平均每秒鐘的傳送次數,與數據傳輸“次數”相關,非容 量
kB_read/s:啓動到現在的平均讀取單位
kB_wrtn/s:啓動到現在的平均寫入單位
kB_read:啓動到現在總共 讀出來的文件
單位
kB_wrtn: 啓動到現在總共寫入的文件單位
如果想要對iostat檢查多此,每次之間的間隔一定數量的秒數,這樣就可以查看每幾秒鐘之內的io統計數 據,這對性能的測試才具有實際意義:
$> iostat -d 2 3
表示沒量秒鐘檢查一次,一共檢查三次
avg-cpu: %user %nice %sys %iowait %idle
4.55 0.00 0.63 0.26 94.56
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
cciss/c0d0 30.11 68.20 67.13 1232900288 1213456210
cciss/c0d0p1 0.00 0.00 0.00 2531 2
cciss/c0d0p2 83.78 68.19 67.11 1232688239 1213208604
dm-0 1.06 0.60 4.07 10873201 73558008
dm-1 82.50 67.42 62.23 1218820537 1124967604
dm-2 0.21 0.18 0.83 3199605 14930372
dm-3 0.00 0.00 0.00 372 224
avg-cpu: %user %nice %sys %iowait %idle
0.00 0.00 0.63 0.00 99.37
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
cciss/c0d0 1.02 0.00 63.27 0 124
cciss/c0d0p1 0.00 0.00 0.00 0 0
cciss/c0d0p2 15.82 0.00 63.27 0 124
dm-0 15.82 0.00 63.27 0 124
dm-1 0.00 0.00 0.00 0 0
dm-2 0.00 0.00 0.00 0 0
dm-3 0.00 0.00 0.00 0 0
avg-cpu: %user %nice %sys %iowait %idle
0.00 0.00 0.32 0.00 99.68
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
cciss/c0d0 3.06 0.00 26.53 0 52
cciss/c0d0p1 0.00 0.00 0.00 0 0
cciss/c0d0p2 6.63 0.00 26.53 0 52
dm-0 0.00 0.00 0.00 0 0
dm-1 6.63 0.00 26.53 0 52
dm-2 0.00 0.00 0.00 0 0
dm-3 0.00 0.00 0.00 0 0
其中每一次的統計都是上 一次的統計時間到這次的統計時間之間的統計數據