我們可以用iostat 命令來監視系統輸入/輸出、裝置負載,這通過觀察與它們的平均傳送速率相關的物理磁碟的活動時間
來實現。iostat 命令生成的報告可以用來更改系統配置,從而更好地平衡物理磁碟和介面卡之間的輸入/輸出負載。當Linux系
統出現效能問題時,用iostat工具檢視程式IO請求下發的數量、系統處理IO請求的耗時,進而分析程式與作業系統的互動過程
中IO方面是否存在瓶頸。
一、基本使用
安裝命令: yum install sysstat
輸入命令後會自動安裝,依賴包沒有安裝時會提示,輸入“ y ”即可。
1.iostat語法
用法:iostat [ 選項 ] [ <時間間隔> [ 次數 ] ]
引數 | 描述 |
-c | 顯示CPU使用情況 |
-d | 顯示磁碟使用情況 |
-N | 顯示磁碟陣列(LVM)資訊 |
-n | 顯示NFS使用情況 |
-k | 輸出結果以KB為單位顯示 |
-m | 輸出結果以MB為單位顯示 |
-t | 報告每秒向終端讀取/寫入的字元數和CPU資訊 |
-V | 顯示版本資訊 |
-x | 顯示詳細的統計資訊 |
-p | 顯示磁碟和分割槽的情況 |
2.單獨執行iostat命令
由 iostat 命令生成的第一份報告提供了關於自從系統被引導後的時間統計資訊,後繼的每一份報告都包含自上一次
報告以來的時間。第一行依次顯示系統版本資訊、主機名、當前日期、CPU位數和CPU個數。
avg-cpu:總體cpu使用情況統計資訊,對於多核cpu,這裡為所有cpu的平均值。重點關注iowait值,表示CPU用於
等待io請求的完成時間,各引數介紹如下:
%user:CPU處在使用者模式下的時間百分比
%nice:CPU處在帶NICE值的使用者模式下的時間百分比
%system:CPU處在系統模式下的時間百分比
%iowait:CPU等待輸入輸出完成時間的百分比
%steal:管理程式維護另一個虛擬處理器時,虛擬CPU的無意識等待時間百分比
%idle:CPU空閒時間百分比
Device:各磁碟裝置的IO統計資訊,引數介紹如下:
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:寫入的資料總量
二、幾種常見用法
1. iostat -c 1 5 檢視CPU狀態,指定時間間隔為1秒,總共顯示5次。
如果%iowait的值過高,表示硬碟存在I/O瓶頸,%idle值高,表示CPU較空閒,如果%idle值高但系統響應
慢時,有可能是CPU等待分配記憶體,此時應加大記憶體容量。%idle值如果持續低於10,那麼系統的CPU處理能
力相對較低,表明系統中最需要解決的資源是CPU。
2. iostat -d sda 檢視指定磁碟資訊
3. iostat -d -k 1 5 檢視TPS和吞吐量資訊
三、獲取更詳細的IO統計資訊
我們可以使用命令 iostat -x -d -k 1 5 來檢視裝置響應率(%util)和響應時間(await)。
rrqm/s:每秒這個裝置相關的讀取請求有多少被Merge了(當系統呼叫需要讀取資料的時候,VFS將請求發到各個FS,
如果FS發現不同的讀取請求讀取的是相同Block的資料,FS會將這個請求合併Merge)
wrqm/s:每秒這個裝置相關的寫入請求有多少被Merge了
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)
rkB/s:每秒讀資料量(kB為單位)
wkB/s:每秒寫資料量(kB為單位)
avgrq-sz:平均每次IO操作的資料量(扇區數為單位)
avgqu-sz:平均等待處理的IO請求佇列長度
await:每一個IO請求的處理的平均時間(毫秒為單位)。這裡可以理解為IO的響應時間,一般地系統IO響應時間
應該低於5ms,如果大於10ms就比較大了。
r_await:讀取請求的平均時間(毫秒為單位)
w_await:寫入請求的平均時間(毫秒為單位)
svctm:平均每次IO請求的處理時間(毫秒為單位)
%util:在統計時間內所有處理IO時間,除以總共統計時間。例如,如果統計間隔1秒,該裝置有0.8秒在處理IO,
而0.2秒閒置,那麼該裝置的%util = 0.8/1 = 80%,所以該引數暗示了裝置的繁忙程度。一般地,如果該引數是
100%表示裝置已經接近滿負荷執行了(當然如果是多磁碟,即使%util是100%,因為磁碟的併發能力,所以磁
盤使用未必就到了瓶頸)。