Linux-IO分析iostat

Linux-IO分析iostatlinux

  1. top查看wa參數用來分析io使用狀況ios

  2. 命令iostat -xdm 3算法

    三秒鐘作一次打印當前io狀態
服務器

主要查看:網絡

util參數,表示當前隊列佔用率,該參數持續大於90%表示磁盤IO存在瓶頸異步

rMB/s用來表示讀取的速度函數

wMB/s用來表示寫入的速度工具

r/s w/s每秒讀寫次數性能


如下是網絡轉載優化

# iostat -x 1 10
Linux 2.6.18-92.el5xen 02/03/2009

avg-cpu: %user %nice %system %iowait %steal %idle
1.10 0.00 4.82 39.54 0.07 54.46

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 3.50 0.40 2.50 5.60 48.00 18.48 0.00 0.97 0.97 0.28
sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdd 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sde 0.00 0.10 0.30 0.20 2.40 2.40 9.60 0.00 1.60 1.60 0.08
sdf 17.40 0.50 102.00 0.20 12095.20 5.60 118.40 0.70 6.81 2.09 21.36
sdg 232.40 1.90 379.70 0.50 76451.20 19.20 201.13 4.94 13.78 2.45 93.16

rrqm/s: 每秒進行 merge 的讀操做數目。即 delta(rmerge)/s
wrqm/s: 每秒進行 merge 的寫操做數目。即 delta(wmerge)/s
r/s: 每秒完成的讀 I/O 設備次數。即 delta(rio)/s
w/s: 每秒完成的寫 I/O 設備次數。即 delta(wio)/s
rsec/s: 每秒讀扇區數。即 delta(rsect)/s
wsec/s: 每秒寫扇區數。即 delta(wsect)/s
rkB/s: 每秒讀K字節數。是 rsect/s 的一半,由於每扇區大小爲512字節。(須要計算)
wkB/s: 每秒寫K字節數。是 wsect/s 的一半。(須要計算)
avgrq-sz:平均每次設備I/O操做的數據大小 (扇區)。delta(rsect+wsect)/delta(rio+wio)
avgqu-sz:平均I/O隊列長度。即 delta(aveq)/s/1000 (由於aveq的單位爲毫秒)。
await: 平均每次設備I/O操做的等待時間 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
svctm: 平均每次設備I/O操做的服務時間 (毫秒)。即 delta(use)/delta(rio+wio)
%util: 一秒中有百分之多少的時間用於 I/O 操做,或者說一秒中有多少時間 I/O 隊列是非空的。即 delta(use)/s/1000 (由於use的單位爲毫秒)

若是 %util 接近 100%,說明產生的I/O請求太多,I/O系統已經滿負荷,該磁盤
可能存在瓶頸。
idle小於70% IO壓力就較大了,通常讀取速度有較多的wait.
同時能夠結合vmstat 查看查看b參數(等待資源的進程數)和wa參數(IO等待所佔用的CPU時間的百分比,高過30%時IO壓力高)

另外還能夠參考
svctm 通常要小於 await (由於同時等待的請求的等待時間被重複計算了),svctm 的大小通常和磁盤性能有關,CPU/內存的負荷也會對其有影響,請求過多也會間接致使 svctm 的增長。await 的大小通常取決於服務時間(svctm) 以及 I/O 隊列的長度和 I/O 請求的發出模式。若是 svctm 比較接近 await,說明 I/O 幾乎沒有等待時間;若是 await 遠大於 svctm,說明 I/O 隊列太長,應用獲得的響應時間變慢,若是響應時間超過了用戶能夠允許的範圍,這時能夠考慮更換更快的磁盤,調整內核 elevator 算法,優化應用,或者升級 CPU。
隊列長度(avgqu-sz)也可做爲衡量系統 I/O 負荷的指標,但因爲 avgqu-sz 是按照單位時間的平均值,因此不能反映瞬間的 I/O 洪水。


別人一個不錯的例子.(I/O 系統 vs. 超市排隊)

舉一個例子,咱們在超市排隊 checkout 時,怎麼決定該去哪一個交款臺呢? 首當是看排的隊人數,5我的總比20人要快吧? 除了數人頭,咱們也經常看看前面人購買的東西多少,若是前面有個採購了一星期食品的大媽,那麼能夠考慮換個隊排了。還有就是收銀員的速度了,若是碰上了連 錢都點不清楚的新手,那就有的等了。另外,時機也很重要,可能 5 分鐘前還人滿爲患的收款臺,如今已經是人去樓空,這時候交款但是很爽啊,固然,前提是那過去的 5 分鐘裏所作的事情比排隊要有意義 (不過我還沒發現什麼事情比排隊還無聊的)。

I/O 系統也和超市排隊有不少相似之處:

r/s+w/s 相似於交款人的總數
平均隊列長度(avgqu-sz)相似於單位時間裏平均排隊人的個數
平均服務時間(svctm)相似於收銀員的收款速度
平均等待時間(await)相似於平均每人的等待時間
平均I/O數據(avgrq-sz)相似於平均每人所買的東西多少
I/O 操做率 (%util)相似於收款臺前有人排隊的時間比例。

咱們能夠根據這些數據分析出 I/O 請求的模式,以及 I/O 的速度和響應時間。

下面是別人寫的這個參數輸出的分析

# iostat -x 1
avg-cpu: %user %nice %sys %idle
16.24 0.00 4.31 79.44
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
/dev/cciss/c0d0
0.00 44.90 1.02 27.55 8.16 579.59 4.08 289.80 20.57 22.35 78.21 5.00 14.29
/dev/cciss/c0d0p1
0.00 44.90 1.02 27.55 8.16 579.59 4.08 289.80 20.57 22.35 78.21 5.00 14.29
/dev/cciss/c0d0p2
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

上面的 iostat 輸出代表秒有 28.57 次設備 I/O 操做: 總IO(io)/s = r/s(讀) +w/s(寫) = 1.02+27.55 = 28.57 (次/秒) 其中寫操做佔了主體 (w:r = 27:1)。

平均每次設備 I/O 操做只須要 5ms 就能夠完成,但每一個 I/O 請求卻須要等上 78ms,爲何? 由於發出的 I/O 請求太多 (每秒鐘約 29 個),假設這些請求是同時發出的,那麼平均等待時間能夠這樣計算:

平均等待時間 = 單個 I/O 服務時間 * ( 1 + 2 + ... + 請求總數-1) / 請求總數

應用到上面的例子: 平均等待時間 = 5ms * (1+2+...+28)/29 = 70ms,和 iostat 給出的78ms 的平均等待時間很接近。這反過來代表 I/O 是同時發起的。

每秒發出的 I/O 請求不少 (約 29 個),平均隊列卻不長 (只有 2 個 左右),這代表這 29 個請求的到來並不均勻,大部分時間 I/O 是空閒的。

一秒中有 14.29% 的時間 I/O 隊列中是有請求的,也就是說,85.71% 的時間裏 I/O 系統無事可作,全部 29 個 I/O 請求都在142毫秒以內處理掉了。

delta(ruse+wuse)/delta(io) = await = 78.21 => delta(ruse+wuse)/s =78.21 * delta(io)/s = 78.21*28.57 = 2232.8,代表每秒內的I/O請求總共須要等待2232.8ms。因此平均隊列長度應爲 2232.8ms/1000ms = 2.23,而 iostat 給出的平均隊列長度 (avgqu-sz) 卻爲 22.35,爲何?! 由於 iostat 中有 bug,avgqu-sz 值應爲 2.23,而不是 22.35。

iostat詳解

報告中央處理器(CPU)的統計信息,整個系統、適配器、tty 設備、磁盤以及 CD-ROM 的異步輸入/輸出(AIO)和輸入/輸出統計信息。
語法
iostat[ -a ] [ -l ] [ -s ] [-t ] [ -T ] [ -z ] [ { -A [ -P ] [ -q | -Q ] } |{ -d |-D [-R ] }[ -m ] [ Drives ... ] [ Interval] [ Count ]
描述
iostat 命令用來監視系統輸入/輸出設備負載,這經過觀察與它們的平均傳送速率相關的物理磁盤的活動時間來實現。iostat 命令生成的報告能夠用來更改系統配置來更好地平衡物理磁盤和適配器之間的輸入/輸出負載。
每次運行 iostat 命令時,就報告全部的統計信息。報告由 tty and CPU 標題行以及接下來的 tty 或 異步 I/O 和 CPU 統計信息行組成。在多處理器系統上,CPU 統計信息是系統範圍計算的,是全部處理器的平均值。
帶有系統中當前活動的 CPU 數量和活動的磁盤數量的眉行顯示在輸出結果的開始部分。若是指定 -s 標誌,則顯示系統眉行,接下來的一行是整個系統的統計信息。系統主機名顯示在系統眉行中。
若是指定 -a 標誌,就會顯示一個適配器頭行,隨後是一行適配器的統計信息。這後面將回有一個磁盤頭行和鏈接到適配器的全部磁盤/CD-ROM 的統計信息。爲全部與系統鏈接的磁盤適配器生成這種報告。
顯示一個磁盤頭行,隨後是一行配置的磁盤的統計信息。若是指定 PhysicalVolume 參數,則只顯示那些指定的名稱。
若是指定 PhysicalVolume 參數,則能夠指定一個或者更多的字母或者字母數字的物理卷。若是指定 PhysicalVolume參數,就會顯示 tty 和 CPU報告而且磁盤報告包含指定驅動器的統計信息。若是沒有發現指定邏輯驅動器名,則報告將列出指定的名稱而且顯示沒有找到驅動器的消息。若是沒有指定邏 輯驅動器名,報告則包含全部已配置的磁盤和 CD-ROM 的統計信息。若是系統上沒有配置驅動器,則不生成磁盤報告。PhysicalVolume參數中的第一個字符不能爲數字型。
Interval 參數指定了在每一個報告之間的以秒計算的時間量。若是沒有指定 Interval參數,iostat 命令將生成一個包含統計信息的報告,該統計信息是在系統啓動(引導)時間裏生成的。 Count 參數可被指定來鏈接Interval 參數。若是指定了 Count 參數,它的記數值就肯定在 Interval 秒間生成的報告數。若是指定了 Interval參數但沒有指定 Count 參數,iostat 命令就會不斷生成報告。
iostat命令用來肯定一個物理卷是否正在造成一個性能瓶頸,以及是否有可能改善這種狀況。物理卷的 %使用率字段代表了文件活動在驅動器中分佈多均勻。物理卷的高 % 使用率是代表也許存在這個資源的爭用很好的徵兆。因爲 CPU使用率的統計信息一樣適用於 iostat 報告,CPU 在 I/O 等待隊列中的時間的百分比能夠在同一時間肯定。若是 I/O等待時間是有效數字而且磁盤使用率不是在捲上均勻分佈,則就要考慮在驅動器上分佈數據。
從 AIX 5.3 開始,iostat 命令報告在 微分區 環境中所消耗的物理處理器數量(physc)和所消耗的受權百分比(% entc)。這些度量值只在 微分區 環境上顯示。
注:
在爲 iostat 命令維護磁盤 I/O 歷史中,消耗一部分系統資源。使用 sysconfig子例程,或者系統管理接口工具(SMIT)來中止歷史記錄賬戶。當 iostat 命令正爲 Count 迭代運行時,而且若是系統配置中有影響iostat 命令輸出的更改,則它會顯示關於配置更改的警告消息。顯示更新後的系統配置信息和標題後,它接着繼續進行輸出。
報告
iostat 命令生成四種類型的報告,tty 和 CPU 使用率報告、磁盤使用率報告、系統吞吐量報告和適配器吞吐量報告。
tty 和 CPU 使用率報告
由 iostat 命令生成的第一份報告是 tty 和 CPU 使用率報告。對於多處理器系統,CPU 值是全部處理器的總平均。同時,I/O 等待狀態是系統級定義的,而不是每一個處理器。報告有如下格式:
欄 描述 
tin 顯示了系統爲全部 tty 讀取的字符總數。 
tout 顯示了系統爲全部 tty 寫入的字符總數。 
% user 顯示了在用戶級(應用程序)執行時生成的 CPU 使用率百分比。 
% sys 顯示了在系統級(內核)執行時生成的 CPU 使用率百分比。 
% idle 顯示了在 CPU 空閒而且系統沒有未完成的磁盤 I/O 請求時的時間百分比。 
% iowait 顯示了 CPU 空閒期間系統有未完成的磁盤 I/O 請求時的時間百分比。 
physc 消耗的物理處理器的數量,僅當分區與共享處理器運行時顯示。 
% entc 消耗的標題容量的百分比,僅當分區與共享處理器運行時顯示。 
每過必定時間間隔,內核就更新這條信息(通常每秒六十次)。tty 報告提供了從系統中全部終端的收到的每秒字符總數,以及和每秒輸出到系統全部終端的字符的總數。
用來計算 CPU 磁盤 I/O 等待時間的方法
操做系統 V4.3.3 和後來的版本包含用來估算 CPU 在磁盤 I/O(wio 時間)等待上的所花時間的百分比的加強方法。用在 AIX4.3.2 和操做系統的早期版本上的方法在必定條件下,可以給出 SMP 上的 wio 時間的一個放大的視圖。wio 時間是根據命令sar(%wio)、 vmstat(wa)和 iostat(% iowait)報告出來的。
在 AIX 4.3.2中和早期版本中使用的方法以下:在每一個處理器(每處理器一秒一百次)的每一個時鐘中斷上,將肯定四個類別(usr/sys/wio/idle)中 的哪個放置在最後的 10ms 內。若是在時鐘中斷的時刻 CPU 以 usr 模式中處於忙狀態,則 usr得到這個時間計點並歸於此類。若是在時鐘中斷時刻 CPU 之內核模式中處於忙狀態,則 sys 類別將得到該計時點。若是 CPU不處於忙狀態,將檢查是否在進行任何磁盤 I/O。若是在進行任何磁盤 I/O,則 wio 類別將增長。若是磁盤在進行 I/O 操做而且 CPU不忙,則 idle 類別將獲取計時點。wio 時間的放大視圖是因爲全部空閒 CPU 被歸爲 wio 而無論在 I/O上等待的線程數所致使。例如,僅有一個線程執行 I/O 的系統能夠報告超過 90% 的 wio 時間而無論其 CPU 數。
在AIX 4.3.3 中和後繼版本中使用的方法以下:若是在那個 CPU 上啓動一個未完成的 I/O,則操做系統 V4.3.3中的更改僅把一個空閒 CPU 標爲 wio。當只有少數線程正在執行 I/O 不然系統就空閒的狀況下,這種方法能夠報告更少的 wio時間。例如,一個有四個 CPU 且只有一個線程執行 I/O 的系統將報告一個最大值是 25% 的 wio 時間。一個有 12 個 CPU且僅有一個線程執行 I/O 的系統將報告一個最大值爲 8% 的 wio 時間。 NFS 客戶機經過 VMM 讀/寫,而且爲了完成一個 I/O而在 vmm 等待中用的時間如今將被報告爲 I/O 等待時間。
磁盤使用率報告
由 iostat 命令生成的第二個報告是磁盤使用率報告。磁盤報告提供了在每一個物理磁盤基礎上的統計信息。缺省報告有與如下相似的格式:
% tm_act 表示物理磁盤處於活動狀態的時間百分比(驅動器的帶寬使用率)。 
Kbps 表示以 KB 每秒爲單位的傳輸(讀或寫)到驅動器的數據量。 
tps 表示每秒鐘輸出到物理磁盤的傳輸次數。一次傳輸就是一個對物理磁盤的 I/O 請求。多個邏輯請求可被併爲對磁盤的一個單一 I/O 請求。傳輸具備不肯定的大小。 
Kb_read 讀取的 KB 總數。 
Kb_wrtn 寫入的 KB 總數。 
若是指定了 -D 標誌,則報告有如下度量值:
與磁盤傳送(xfer)有關的度量值: 
% tm_act 表示物理磁盤處於活動狀態的時間百分比(驅動器的帶寬使用率)。 
bps 表示每秒傳輸(讀或寫)到驅動器的數據量。使用不一樣的後綴來表明傳送單位。缺省單位是字節/秒。 
tps 表示每秒鐘輸出到物理磁盤的傳輸次數。一次傳輸就是一個對物理磁盤的 I/O 請求。多個邏輯請求可被併爲對磁盤的一個單一 I/O 請求。傳輸具備不肯定的大小。 
bread 表示每秒從驅動器上讀取的數據量。使用不一樣的後綴來表明傳送單位。缺省單位是字節/秒。 
bwrtn 表示每秒寫入到驅動器的數據量。使用不一樣的後綴來表明傳送單位。缺省單位是字節/秒。 
磁盤讀取服務度量值(讀取): 
rps 表示每秒讀取傳輸的數量。 
avgserv 表示每次讀取傳輸的平均服務時間。使用不一樣的後綴來表明時間單位。缺省單位是毫秒。 
minserv 表示最少的讀取服務時間。使用不一樣的後綴來表明時間單位。缺省單位是毫秒。 
maxserv 表示最多的讀取服務時間。使用不一樣的後綴來表明時間單位。缺省單位是毫秒。 
timeouts 表示每秒讀取超時的數量。 
fails 表示每秒失敗的讀取請求的數量。 
磁盤寫入服務度量值(寫入): 
wps 表示每秒寫入傳輸的數量。 
avgserv 表示每次寫入傳輸的平均服務時間。使用不一樣的後綴來表明時間單位。缺省單位是毫秒。 
minserv 表示最少的寫入服務時間。使用不一樣的後綴來表明時間單位。缺省單位是毫秒。 
maxserv 表示最多的寫入服務時間。使用不一樣的後綴來表明時間單位。缺省單位是毫秒。 
timeouts 表示每秒寫入超時的數量。 
fails 表示每秒失敗的寫入請求的數量。 
磁盤等待隊列服務度量值(隊列): 
avgtime 表示傳輸請求在等待隊列中所花的平均時間。使用不一樣的後綴來表明時間單位。缺省單位是毫秒。 
mintime 表示傳輸請求在等待隊列中所花的最短期。使用不一樣的後綴來表明時間單位。缺省單位是毫秒。 
maxtime 表示傳輸請求在等待隊列中所花的最長時間。使用不一樣的後綴來表明時間單位。缺省單位是毫秒。 
avgwqsz 表示等待隊列的平均大小。 
avgsqsz 表示服務隊列的平均大小。 
sqfull 表示每秒內服務隊列變滿(即,磁盤再也不接受任何服務請求)的次數。 
表明不一樣說明單元的後綴圖注 
後綴 描述 
K 1000 字節 
M 1 000 000 字節(若是以 xfer 度量值顯示)。分鐘(若是以讀取/寫入/等待服務度量值顯示)。 
G 1 000 000 000 字節。 
T 1 000 000 000 000 字節。 
S 秒。 
H 小時。 
注:
對於不支持服務時間度量值的驅動器,將不顯示讀取、寫入和等候隊列服務度量值。
CD-ROM 設備的統計信息也要報告。
系統吞吐量報告
若是指定 -s 標誌將生成這個報告。這份報告提供了整個系統的統計信息。這份報告有如下格式:
Kbps 表示了每秒以 KB 爲單位的傳輸(讀或寫)到整個系統的數據量。 
tps 表示每秒傳輸到整個系統的傳輸次數。 
Kb_read 從整個系統中讀取的 KB 總數。 
Kb_wrtn 寫到整個系統的 KB 總數。 
適配器吞吐量報告
若是指定 -a 標誌將生成該報告。這份報告提供了以每一個適配器(包括物理適配器和虛擬適配器)爲基礎的統計信息。該報告對於物理適配器報告具備如下格式:
Kbps 表示每秒鐘以 KB 爲單位的傳輸到(讀或寫)到適配器的數據量。 
tps 表示每秒鐘輸出到適配器的傳輸次數。 
Kb_read 從適配器讀取的 KB 總數。 
Kb_wrtn 寫到適配器的 KB 總數。 
虛擬適配器的缺省吞吐量報告有如下格式:
Kbps 表示每秒鐘以 KB 爲單位的傳輸到(讀或寫)到適配器的數據量。 
tps 表示每秒鐘輸出到適配器的傳輸次數。 
bkread 每秒從託管服務器接收至該適配器的塊數。 
bkwrtn 每秒從該適配器發送至託管服務器的塊數。 
partition-id 託管服務器的分區標識,它爲該適配器發送的請求提供服務。 
虛擬適配器的擴展吞吐量報告(-D 選項)有如下格式:
與傳送(xfer:)有關的度量值 
Kbps 表示每秒鐘以 KB 爲單位的傳輸到(讀或寫)到適配器的數據量。 
tps 表示每秒鐘輸出到適配器的傳輸次數。 
bkread 每秒從託管服務器接收至該適配器的塊數。 
bkwrtn 每秒從該適配器發送至託管服務器的塊數。 
partition-id 託管服務器的分區標識,它爲該適配器發送的請求提供服務。 
適配器讀取服務度量值(讀取:) 
rps 表示每秒讀取請求的數量。 
avgserv 表示爲已發送的讀取請求從託管服務器上接收響應的平均時間。使用不一樣的後綴來表明時間單位。缺省單位是毫秒。 
minserv 表示爲已發送的讀取請求從託管服務器上接收響應的最短期。使用不一樣的後綴來表明時間單位。缺省單位是毫秒。 
maxserv 表示爲已發送的讀取請求從託管服務器上接收響應的最長時間。使用不一樣的後綴來表明時間單位。缺省單位是毫秒。 
適配器寫入服務度量值(寫入:) 
wps 表示每秒寫入請求的數量。 
avgserv 表示爲已發送的寫入請求從託管服務器上接收響應的平均時間。使用不一樣的後綴來表明時間單位。缺省單位是毫秒。 
minserv 表示爲已發送的寫入請求從託管服務器上接收響應的最短期。使用不一樣的後綴來表明時間單位。缺省單位是毫秒。 
maxserv 表示爲已發送的寫入請求從託管服務器上接收響應的最長時間。使用不一樣的後綴來表明時間單位。缺省單位是毫秒。 
適配器等待隊列度量值(隊列:) 
avgtime 表示傳輸請求在等待隊列中所花的平均時間。使用不一樣的後綴來表明時間單位。缺省單位是毫秒。 
mintime 表示傳輸請求在等待隊列中所花的最短期。使用不一樣的後綴來表明時間單位。缺省單位是毫秒。 
maxtime 表示傳輸請求在等待隊列中所花的最長時間。使用不一樣的後綴來表明時間單位。缺省單位是毫秒。 
avgwqsz 表示等待隊列的平均大小。 
avgsqsz 表示服務隊列的平均大小。 
sqfull 表示每秒內服務隊列變滿(即,託管服務器再也不接受任何服務請求)的次數。 
表明不一樣說明單元的後綴圖注 
後綴 描述 
K 1000 字節。 
M 1 000 000 字節(若是以 xfer 度量值顯示)。分鐘(若是以讀取/寫入/等待服務度量值顯示)。 
G 1 000 000 000 字節。 
T 1 000 000 000 000 字節。 
S 秒。 
H 小時。 
異步 I/O 報告
異步 I/O 報告有如下列標題:
avgc 指定時間間隔的每秒平均全局 AIO 請求計數。 
avfc 指定時間間隔的每秒平均快速路徑請求計數。 
maxgc 上一次訪存這個值以來的最大全局 AIO 請求計數。 
maxfc 上一次訪存這個值以來的最大快速路徑請求計數。 
maxreqs 所容許的最大 AIO 請求數。 
磁盤輸入/輸出歷史記錄
爲了提升性能,已經禁用了磁盤輸入/輸出統計信息的收集。要啓用該數據的集合,請輸入:

chdev -l sys0 -a iostat=true
要顯示當前設置,請輸入:

lsattr -E -l sys0 -a iostat
若是禁用了磁盤輸入/輸出歷史記錄的收集,而且在不帶時間間隔的狀況下調用了 iostat,則 iostat 輸出將顯示消息自引導以來的磁盤歷史記錄不可用,而不是磁盤統計信息。
標誌
-a 指定適配器吞吐量報告。 
-A 顯示指定時間間隔和計數的 AIO 統計信息。 
-d 只指定驅動器報告。 
-D 只指定擴展驅動器報告。 
-l 對長列表方式顯示輸出。缺省列寬是 80。 
-m 指定路徑的統計信息。 
-P 與 -A 選項相同,使用 POSIX AIO 調用獲取的數據除外。 
-q 指定 AIO 隊列和它們的請求計數。 
-Q 顯示全部安裝的文件系統和相關的隊列數以及它們請求計數的列表。 
-R 指定在每一個時間間隔都應復位 min* 和 max* 值。缺省狀況下將僅在 iostat 啓動時執行一次復位。 
-s 指定系統吞吐量報告。 
-t 只指定 tty/cpu 報告。 
-T 指定時間戳記。 
-z 復位磁盤輸入/輸出統計信息。只有 root 用戶纔可使用此選項。 
注:
-q 或 -Q 只能與 -A 一塊兒指定。 
-a 和 -s 也能夠與 -A 一塊兒指定,但在指定了-q 或 -Q 時不能與 -A 一塊兒指定。 
-t 和 -d 不能同時指定。 
-t 和 -D 不能同時指定。 
-d 和 -D 不能同時指定。 
-R 只能和 -D 一塊兒指定。 
示例
要爲全部 tty、CPU 和磁盤顯示引導後的單一歷史記錄報告,請輸入: 
iostat
要爲邏輯名是 disk1 的磁盤顯示一個以兩秒爲時間間隔的持續磁盤報告,請輸入: 
iostat -d disk1 2
要爲邏輯名是 disk1 的磁盤顯示以兩秒爲時間間隔的六個報告,請輸入: 
iostat disk1 2 6
要爲全部磁盤顯示以兩秒爲時間間隔的六個報告,請輸入: 
iostat -d 2 6
要爲三個名稱分別爲 disk一、disk二、disk3 的磁盤顯示以兩秒爲時間間隔的六個報告,請輸入: 
iostat disk1 disk2 disk3 2 6
要打印系統引導以來的系統吞吐量報告,請輸入:

iostat -s
要打印以五秒爲時間間隔的適配器吞吐量報告,請輸入: 
iostat -a 5
要打印以二十秒爲時間間隔的十個系統和適配器吞吐量報告,且僅帶有 tty 和 CPU 報告(沒有磁盤報告),請輸入: 

iostat -sat 20 10
要打印帶有 hdisk0 和 hdisk7 的磁盤使用率報告的系統和適配器吞吐量報告(每 30 秒一次),請輸入: 
iostat -sad hdisk0 hdisk7 30
要顯示 iostat 輸出的每行的下一行的時間戳記,請輸入: 
iostat -T 60
要顯示關於 AIO 的以兩秒爲時間間隔的六個報告,請輸入: 
iostat -A 2 6 
要顯示自引導以來與全部已安裝的文件系統相關的隊列的 AIO 統計信息,請輸入: 
iostat -A -Q
要顯示全部磁盤的擴展驅動器報告,請輸入: 
iostat -D 
要顯示某個特定磁盤的擴展驅動器報告,請輸入: 
iostat –D hdisk0 
要復位磁盤輸入/輸出統計信息,請輸入: 
iostat –z
文件
/usr/bin/iostat 包含 iostat 命令。

查看aix下物理內存

AIX中如何查看內存容量

2008年06月23日 星期一 21:38

#bootinfo -r

查看物理內存

lsattr -El mem0

lsattr -El sys0 -a realmem

使用命令# lsdev -Cc memory

查看配置的物理內存設備,下面爲其輸出示例:

mem0 Available 00-00 Memory

L2cache0 Available 00-00 L2 Cache

再使用命令# lsattr -El mem0

輸出以下

size 512 Total amount of physical memory in Mbytes False

goodsize 512 Amount of usable physical memory in Mbytes False

此例說明機器的物理內存爲512MB。若是前面lsdev的輸出中有設備名 mem1,則使用一樣的命令查看其對應的大小並依此類推。

prtconf就能夠查看系統全部的信息 cpu 內存 硬盤等..

svmon -G

root@m2a/etc>svmon -G

size inuse free pin virtual

memory 4194304 1088794 3105510 274650 690272

pg space 2097152 3775

work pers clnt lpage

pin 274650 0 0 0

in use 690290 257951 140553 0

root@m2a/etc>

其中: size表示真實的物理內存的大小,單位是4k

iostat 輸出解析1. /proc/partitions對於kernel 2.4, iostat 的數據的主要來源是 /proc/partitions,而對於kernel 2.6, 數據主要來自/proc/diskstats或/sys/block/[block-device-name]/stat。先看看 /proc/partitions 中有些什麼。# cat /proc/partitionsmajor minor #blocks name rio rmerge rsect ruse wio wmerge wsect wuse running use aveq3 0 19535040 hda 12524 31127 344371 344360 12941 25534 308434 1097290 -1 15800720 282146623 1 7172991 hda1 13 71 168 140 0 0 0 0 0 140 1403 2 1 hda2 0 0 0 0 0 0 0 0 0 0 03 5 5116671 hda5 100 477 665 620 1 1 2 30 0 610 6503 6 265041 hda6 518 92 4616 2770 257 3375 29056 143880 0 46520 1466503 7 6980211 hda7 11889 30475 338890 340740 12683 22158 279376 953380 0 509350 1294120major: 主設備號。3 表明 hda。minor: 次設備號。7 表明 No.7 分區。#blocks: 設備總塊數 (1024 bytes/block)。19535040*1024 => 20003880960(bytes) ~2Gname: 設備名稱。如 hda7。rio: 完成的讀 I/O 設備總次數。指真正向 I/O 設備發起並完成的讀操做數目,也就是那些放到 I/O 隊列中的讀請求。注意很是多進程發起的讀操做(read())很是可能會和其餘的操做進行 merge,不必定每一個 read() 調用都引發一個 I/O 請求。rmerge: 進行了 merge 的讀操做數目。rsect: 讀扇區總數 (512 bytes/sector)ruse: 從進入讀隊列到讀操做完成的時間累積 (毫秒)。上面的例子顯示從開機開始,讀 hda7 操做共用了約340秒。wio: 完成的寫 I/O 設備總次數。wmerge: 進行了 merge 的寫操做數目。wsect: 寫扇區總數wuse: 從進入寫隊列到寫操做完成的時間累積 (毫秒)running: 已進入 I/O 請求隊列,等待進行設備操做的請求總數。上面的例子顯示 hda7 上的請求隊列長度爲 0。use: 扣除重疊等待時間的淨等待時間 (毫秒)。通常比 (ruse+wuse) 要小。比如 5 個讀請求同時等待了 1 毫秒,那麼 ruse值爲5ms, 而 use值爲1ms。use 也能理解爲I/O隊列處於不爲空狀態的總時間。hda7 的I/O隊列非空時間爲 509 秒,約合8分半鐘。aveq: 在隊列中總的等待時間累積 (毫秒) (約等於ruse+wuse)。爲何是「約等於」而不是等於呢?讓咱們看看aveq, ruse, wuse的計算方式,這些量通常是在I/O完成後進行更新的:aveq += in-flight * (now - disk->stamp);ruse += jiffies - req->start_time; // 若是是讀操做的話wuse += jiffies - req->start_time; // 若是是寫操做的話注 意aveq計算中的in-flight,這是當前還在隊列中的I/O請求數目。這些I/O尚未完成,因此不能計算到ruse或wuse中。理論上,只有 在I/O所有完成後,aveq纔會等於ruse+wuse。舉一個例子,假設初始時隊列中有三個讀請求,每一個請求須要1秒鐘完成。在1.5秒這一時刻, aveq和ruse各是多少呢?ruse = 1 // 由於此時只有一個請求完成aveq = 3*1 + 2*0.5 = 4 // 由於第二個請求剛發出0.5秒鐘,另更有一個請求在隊列中呢。// 這樣第一秒鐘時刻有3個in-flight,而1.5秒時刻有2個in-flight.若是三個請求所有完成後,ruse才和aveq相等:ruse = 1 + 2 + 3 = 6aveq = 1 + 2 + 3 = 6周詳說明請參考 linux/drivers/block/ll_rw_blk.c中的end_that_request_last()和disk_round_stats()函數。2. iostat 結果解析# iostat -xLinux 2.4.21-9.30AX (localhost) 2004年07月14日avg-cpu: %user %nice %sys %idle3.85 0.00 0.95 95.20Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util/dev/hda 1.70 1.70 0.82 0.82 19.88 20.22 9.94 10.11 24.50 11.83 57.81 610.76 99.96/dev/hda1 0.00 0.00 0.00 0.00 0.01 0.00 0.00 0.00 12.92 0.00 10.77 10.77 0.00/dev/hda5 0.02 0.00 0.00 0.00 0.03 0.00 0.02 0.00 6.60 0.00 6.44 6.04 0.00/dev/hda6 0.01 0.38 0.05 0.03 0.43 3.25 0.21 1.62 46.90 0.15 193.96 52.25 0.41/dev/hda7 1.66 1.33 0.76 0.79 19.41 16.97 9.70 8.49 23.44 0.79 51.13 19.79 3.07rrqm/s: 每秒進行 merge 的讀操做數目。即 delta(rmerge)/swrqm/s: 每秒進行 merge 的寫操做數目。即 delta(wmerge)/sr/s: 每秒完成的讀 I/O 設備次數。即 delta(rio)/sw/s: 每秒完成的寫 I/O 設備次數。即 delta(wio)/srsec/s: 每秒讀扇區數。即 delta(rsect)/swsec/s: 每秒寫扇區數。即 delta(wsect)/srkB/s: 每秒讀K字節數。是 rsect/s 的一半,由於每扇區大小爲512字節。wkB/s: 每秒寫K字節數。是 wsect/s 的一半。avgrq-sz: 平均每次設備I/O操做的數據大小 (扇區)。即 delta(rsect+wsect)/delta(rio+wio)avgqu-sz: 平均I/O隊列長度。即 delta(aveq)/s/1000 (由於aveq的單位爲毫秒)。await: 平均每次設備I/O操做的等待時間 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)svctm: 平均每次設備I/O操做的服務時間 (毫秒)。即 delta(use)/delta(rio+wio)%util: 一秒中有百分之多少的時間用於 I/O 操做,或說一秒中有多少時間 I/O 隊列是非空的。即 delta(use)/s/1000 (由於use的單位爲毫秒)若是 %util 接近 100%,說明產生的I/O請求太多,I/O系統已滿負荷,該磁盤可能存在瓶頸。svctm 通常要小於 await (由於同時等待的請求的等待時間被重複計算了),svctm 的大小通常和磁盤性能有關,CPU/內存的負荷也會對其有影響,請求過多也會間接致使 svctm 的增長。await 的大小通常取決於服務時間(svctm) 及 I/O 隊列的長度和 I/O 請求的發出模式。若是 svctm 比較接近 await,說明 I/O 幾乎沒有等待時間;若是 await 遠大於 svctm,說明 I/O 隊列太長,應用獲得的響應時間變慢,若是響應時間超過了用戶能允許的範圍,這時能考慮更換更快的磁盤,調整內核 elevator 算法,優化應用,或升級 CPU。隊列長度(avgqu-sz)也可做爲衡量系統 I/O 負荷的指標,但因爲 avgqu-sz 是按照單位時間的平均值,因此不能反映瞬間的 I/O 洪水。3. I/O 系統 vs. 超市排隊舉一個例子,咱們在超市排隊 checkout 時,怎麼決定該去哪一個交款臺呢? 首當是看排的隊人數,5我的總比20人要快吧? 除了數人頭,咱們也經常看看前面人購買的東西多少,若是前面有個採購了一星期食品的大媽,那麼能考慮換個隊排了。更有就是收銀員的速度了,若是碰上了連錢都點不清晰的新手,那就有的等了。另外,時機也很是重要,可能 5 分鐘前還人滿爲患的收款臺,目前已經是人去樓空,這時候交款但是很是爽啊,固然,前提是那過去的 5 分鐘裏所作的事情比排隊要有意義 (不過我還沒發現什麼事情比排隊還無聊的)。I/O 系統也和超市排隊有很是多相似之處:r/s+w/s 相似於交款人的總數平均隊列長度(avgqu-sz)相似於單位時間裏平均排隊人的個數平均服務時間(svctm)相似於收銀員的收款速度平均等待時間(await)相似於平均每人的等待時間平均I/O數據(avgrq-sz)相似於平均每人所買的東西多少I/O 操做率 (%util)相似於收款臺前有人排隊的時間比例。咱們能根據這些數據分析出 I/O 請求的模式,及 I/O 的速度和響應時間。4. 一個例子# iostat -x 1avg-cpu: %user %nice %sys %idle16.24 0.00 4.31 79.44Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util/dev/cciss/c0d00.00 44.90 1.02 27.55 8.16 579.59 4.08 289.80 20.57 22.35 78.21 5.00 14.29/dev/cciss/c0d0p10.00 44.90 1.02 27.55 8.16 579.59 4.08 289.80 20.57 22.35 78.21 5.00 14.29/dev/cciss/c0d0p20.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 上面的 iostat 輸出代表秒有 28.57 次設備 I/O 操做: delta(io)/s = r/s +w/s = 1.02+27.55 = 28.57 (次/秒) 其中寫操做佔了主體 (w:r = 27:1)。平均每次設備 I/O 操做只須要 5ms 就能完成,但每一個 I/O 請求卻須要等上 78ms,爲何? 由於發出的 I/O 請求太多 (每秒鐘約 29 個),假設這些請求是同時發出的,那麼平均等待時間能這樣計算:平均等待時間 = 單個 I/O 服務時間 * ( 1 + 2 + ... + 請求總數-1) / 請求總數應用到上面的例子: 平均等待時間 = 5ms * (1+2+...+28)/29 = 70ms,和 iostat 給出的 78ms 的平均等待時間很是接近。這反過來代表 I/O 是同時發起的。每秒發出的 I/O 請求很是多 (約 29 個),平均隊列卻不長 (只有 2 個 左右),這代表這 29 個請求的到來並不均勻,大部分時間 I/O 是空閒的。一秒中有 14.29% 的時間 I/O 隊列中是有請求的,也就是說,85.71% 的時間裏 I/O 系統無事可作,全部 29 個 I/O 請求都在142毫秒以內處理掉了。delta(ruse+wuse)/delta(io) = await = 78.21 => delta(ruse+wuse)/s =78.21 * delta(io)/s = 78.21*28.57 = 2232.8,代表每秒內的I/O請求總共需要等待2232.8ms。因此平均隊列長度應爲 2232.8ms/1000ms = 2.23,而 iostat 給出的平均隊列長度 (avgqu-sz) 卻爲 22.35,爲何?! 由於 iostat 中有 bug,avgqu-sz 值應爲 2.23,而不是 22.35。5. iostat 的 bug 修正iostat.c 中是這樣計算avgqu-sz的:((double) current.aveq) / itvaveq 的單位是毫秒,而 itv 是兩次採樣之間的間隔,單位是 jiffies。必須換算成一樣單位才能相除,因此正確的算法是:((double) current.aveq) / itv * HZ / 1000這樣,上面 iostat 中輸出的 avgqu-sz 值應爲 2.23,而不是 22.3。另外,util值的計算中作了 HZ 值的假設,不是很是好,也須要修改。--- sysstat-4.0.7/iostat.c.orig 2004-07-15 13:31:27.000000000 +0800+++ sysstat-4.0.7/iostat.c 2004-07-15 13:37:34.000000000 +0800@@ -370,7 +370,7 @@nr_ios = current.rd_ios + current.wr_ios;tput = nr_ios * HZ / itv;- util = ((double) current.ticks) / itv;+ util = ((double) current.ticks) / itv * HZ / 1000;/* current.ticks (ms), itv (jiffies) */svctm = tput ? util / tput : 0.0;/* kernel gives ticks already in milliseconds for all platforms -> no need for further scaling */@@ -387,12 +387,12 @@((double) current.rd_sectors) / itv * HZ, ((double) current.wr_sectors) / itv * HZ,((double) current.rd_sectors) / itv * HZ / 2, ((double) current.wr_sectors) / itv * HZ / 2,arqsz,- ((double) current.aveq) / itv,+ ((double) current.aveq) / itv * HZ / 1000, /* aveq is in ms */await,/* again: ticks in milliseconds */- svctm * 100.0,+ svctm,/* NB: the ticks output in current sard patches is biased to output 1000 ticks per second */- util * 10.0);+ util * 100.0);}}}一下子 jiffies, 一下子 ms,看來 iostat 的做者也被搞暈菜了。這個問題在 systat 4.1.6 中獲得了修正:* The average I/O requests queue length as displayed by iostat -x waswrongly calculated. This is now fixed.但 Redhat 的 sysstat 版本有些太過期了 (4.0.7)。

相關文章
相關標籤/搜索