定制網(wǎng)站建設報價單網(wǎng)址導航下載到桌面
性能測試,監(jiān)控磁盤讀寫iostat
iostat是I/O statistics(輸入/輸出統(tǒng)計)的縮寫,iostat工具將對系統(tǒng)的磁盤操作活動進行監(jiān)視。它的特點是匯報磁盤活動統(tǒng)計情況,同時也會匯報出 CPU使用情況。同vmstat一樣,iostat也有一個弱點,就是它不能對某個進程進行深入分析,僅對系統(tǒng)的整體情況進行分析。
iostat的語法如下:
iostat [ -c | -d ] [ -k ] [ -t ] [ -V ] [ -x [ device ] ] [ interval [ count ] ]
其中,-c為匯報CPU的使用情況;-d為匯報磁盤的使用情況;-k表示每秒按kilobytes字節(jié)顯示數(shù)據(jù);-t為打印匯報的時間;-v表示打印出版本信息和用法;-x device指定要統(tǒng)計的設備名稱,默認為所有的設備;interval指每次統(tǒng)計間隔的時間;count指按照這個時間間隔統(tǒng)計的次數(shù)。
1、性能測試過程中用到的命令
命令:iostat -d -x -k 1
-d:僅顯示磁盤統(tǒng)計信息,與-c選項互斥
-x:顯示更詳細的磁盤報告信息,默認只顯示六列,加上該參數(shù)后會顯示更詳細的信息(該參數(shù)僅在linux內(nèi)核版本2.4以后數(shù)據(jù)才是準確的)
-k:以 kb 為單位顯示,默認情況下,iostat的輸出是以block作為計量單位,加上這個參數(shù)可以以kb作為計量單位顯示。(該參數(shù)僅在linux內(nèi)核版本2.4以后數(shù)據(jù)才是準確的)
1 :數(shù)據(jù)顯示每隔1秒刷新一次。
2、監(jiān)控結(jié)果
100線程,循環(huán)執(zhí)行300s(5分鐘),對數(shù)據(jù)庫進行更新操作的IO監(jiān)控
上面圖說明:
磁盤:dba 1、wkB/s的值為2088,表示每秒寫入2088KB 2、await的值為1.2,svctm的值0.47,await的值>svctm的值,則表示I/O隊列有等待。 如果svctm的值與await很接近,表示幾乎沒有I/O等待,磁盤性能很好,如果await的值遠高于svctm的值,則表示I/O隊列等待太長,系統(tǒng)上運行的應用程序?qū)⒆兟? 3、a_wait的值為1.2,表示每個寫操平均所需要的時間1.2ms 磁盤:dbb 1、w/s的值為16541,表示每秒向該設備發(fā)出的寫請求數(shù)為16541. 2、wkB/s的值為223312KB/s,表示每秒寫入223312KB 3、avgqu-sz為0.89,表示平均隊列長度為0.89[隊列里的平均I/O請求數(shù)量,更恰當?shù)睦斫鈶撌瞧骄赐瓿傻腎/O請求數(shù)量。] 4、%util為50.9%如果 svctm 比較接近 await,說明 I/O 幾乎沒有等待時間;如果 await 遠大于 svctm,說明I/O 隊列太長,io響應太慢,則需要進行必要優(yōu)化。如果avgqu-sz比較大,也表示有當量io在等待。如果 %util 接近 100%,說明產(chǎn)生的I/O請求太多,I/O系統(tǒng)已經(jīng)滿負荷,該磁盤可能存在瓶頸。
3、結(jié)果參數(shù)說明
參考:Linux高階—磁盤性能分析iostat
如何通過以上指標數(shù)據(jù)判斷磁盤有沒有瓶頸呢?
查看await值,響應時間是不是長期響應慢,如果是那肯定有問題;
查看svctm的值與await很接近,說明IO任務提交之后,IO立即響應了,表示幾乎沒有I/O等待,磁盤性能很好,反之則有問題;
查看aqu-sz隊列值,越小越好,反之差值越大,隊列越大,說明有問題;
參考說明:http://www.xaprb.com/blog/2010/09/06/beware-of-svctm-in-linuxs-iostat/
Device: ? ? ? ? rrqm/s ? wrqm/s ? ? r/s ? ? w/s ? ?rkB/s ? ?wkB/s avgrq-sz avgqu-sz ? await r_await w_await ?svctm ?%util
rrqm/s:每秒合并讀操作的次數(shù),如果兩個讀操作讀取相鄰的數(shù)據(jù)塊時,可以被合并成一個,以提高效率。合并的操作通常是I/O scheduler(也叫elevator)負責的。每秒這個設備相關的讀取請求有多少被Merge了(當系統(tǒng)調(diào)用需要讀取數(shù)據(jù)的時候,VFS將請求發(fā)到各個FS,如果FS發(fā)現(xiàn)不同的讀取請求讀取的是相同Block的數(shù)據(jù),FS會將這個請求合并Merge); wrqm/s:每秒這個設備相關的寫入請求有多少被Merge了。 r/s 每秒向該設備發(fā)出的讀請求數(shù)? w/s?同樣,它是每秒向該設備發(fā)出的寫請求數(shù) rsec/s:每秒讀取的扇區(qū)數(shù); wsec/s:每秒寫入的扇區(qū)數(shù)。 rKB/s:每秒讀取的字節(jié)數(shù)(KB) wKB/s:每秒寫入的字節(jié)數(shù)(KB) avgrq-sz:平均請求扇區(qū)的大小 avgqu-sz:是平均請求隊列的長度。毫無疑問,隊列越短越好。 這里使用超市購物來比較iostat的輸出。當我們在超市結(jié)賬時,通常會有很多人排隊。排隊長度在一定程度上反應了收銀臺的繁忙程度。那么這個變量就反映在avgqu-sz的輸出上,值越大,排隊等待處理的io越多。 ? ? await:await是單個I/O所消耗的時間,包括硬盤設備處理I/O的時間和I/O請求在kernel隊列中等待的時間: await = IO 平均處理時間 + IO在隊列的平均等待時間 每一個IO請求的處理的平均時間(單位是毫秒)。這里可以理解為IO的響應時間,一般地系統(tǒng)IO響應時間應該低于5ms,如果大于10ms就比較大了。這個時間包括了隊列時間和服務時間,也就是說,一般情況下,await大于svctm,它們的差值越小,則說明隊列時間越短,反之差值越大,隊列時間越長,說明系統(tǒng)出了問題。 r_await:每個讀操作平均所需要的時間,包括硬盤設備讀操作的時間,也包括在內(nèi)核隊列中的時間。(單位ms) w_wait:每個寫操平均所需要的時間,包括硬盤設備寫操作的時間,也包括在隊列中等待的時間。(單位ms) svctm:表示平均每次設備I/O操作的服務時間(以毫秒為單位)。 如果svctm的值與await很接近,表示幾乎沒有I/O等待,磁盤性能很好,如果await的值遠高于svctm的值,則表示I/O隊列等待太長,系統(tǒng)上運行的應用程序?qū)⒆兟?如果svctm比較接近await,說明I/O幾乎沒有等待時間;如果await遠大于svctm,說明I/O隊列太長,應用得到的響應時間變慢, 如果響應時間超過了用戶可以容許的范圍,這時可以考慮更換更快的磁盤,md調(diào)整內(nèi)核elevator算法,優(yōu)化應用,或者升級CPU。 %util: 在統(tǒng)計時間內(nèi)所有處理IO時間,除以總共統(tǒng)計時間。 例如,如果統(tǒng)計間隔1秒,該設備有0.8秒在處理IO,而0.2秒閑置,那么該設備的%util = 0.8/1 = 80%,所以該參數(shù)暗示了設備的繁忙程度 。一般地,如果該參數(shù)是100%表示設備已經(jīng)接近滿負荷運行了 (如果?%util?接近?100%,說明產(chǎn)生的I/O請求太多,I/O系統(tǒng)已經(jīng)滿負荷,該磁盤可能存在瓶頸。) (當然如果是多磁盤,即使%util是100%,因為磁盤的并發(fā)能力,所以磁盤使用未必就到了瓶頸.)
其他參考:
一、重點關注參數(shù)
1、iowait% 表示CPU等待IO時間占整個CPU周期的百分比,如果iowait值超過50%,或者明顯大于%system、%user以及%idle,表示IO可能存在問題。
2、avgqu-sz 表示磁盤IO隊列長度,即IO等待個數(shù)。
3、await 表示每次IO請求等待時間,包括等待時間和處理時間
4、svctm 表示每次IO請求處理的時間
5、%util 表示磁盤忙碌情況,一般該值超過80%表示該磁盤可能處于繁忙狀態(tài)。
二、另外還可以參考
一般:
svctm < await?(因為同時等待的請求的等待時間被重復計算了),
svctm的大小一般和磁盤性能有關:CPU/內(nèi)存的負荷也會對其有影響,請求過多也會間接導致 svctm 的增加。
await:?await的大小一般取決于服務時間(svctm) 以及 I/O 隊列的長度和 I/O 請求的發(fā)出模式。
如果 svctm 比較接近 await,說明I/O 幾乎沒有等待時間;
如果 await 遠大于 svctm,說明 I/O隊列太長,應用得到的響應時間變慢,
如果響應時間超過了用戶可以容許的范圍,這時可以考慮更換更快的磁盤,調(diào)整內(nèi)核?elevator算法,優(yōu)化應用,或者升級 CPU。
隊列長度(avgqu-sz)也可作為衡量系統(tǒng) I/O 負荷的指標,但由于 avgqu-sz 是按照單位時間的平均值,所以不能反映瞬間的 I/O 洪水。三、使用iostat -xz 1還是使用sar -d 1,對于磁盤重要的參數(shù)是:
avgqu-sz: 發(fā)送給設備I/O請求的等待隊列平均長度,對于單個磁盤如果值>1表明設備飽和,對于多個磁盤陣列的邏輯磁盤情況除外;
await(r_await、w_await): 平均每次設備I/O請求操作的等待時間(ms),包含請求排列在隊列中和被服務的時間之和;
svctm: 發(fā)送給設備I/O請求的平均服務時間(ms),如果svctm與await很接近,表示幾乎沒有I/O等待,磁盤性能很好,否則磁盤隊列等待時間較長,磁盤響應較差;
%util: 設備的使用率,表明每秒中用于I/O工作時間的占比,單個磁盤當%util>60%的時候性能就會下降(體現(xiàn)在await也會增加),當接近100%時候就設備飽和了,但對于有多個磁盤陣列的邏輯磁盤情況除外;
四、其他說明:
svctm參數(shù)代表平均每次設備I/O操作的服務時間 (毫秒),反應了磁盤的負載情況,如果該項大于15ms(或者20ms),并且util%接近100%,那就說明,磁盤現(xiàn)在是整個系統(tǒng)性能的瓶頸了。await 參數(shù)代表平均每次設備I/O操作的等待時間 (毫秒),也要多和 svctm 來參考。差的過高就一定有 IO 的問題。如果 svctm 比較接近 await,說明 I/O 幾乎沒有等待時間;如果 await 遠大于 svctm,說明 I/O 隊列太長,應用得到的響應時間變慢。
await值的大小一般取決與svctm的值和I/O隊列長度以及I/O請求模式,如果svctm的值與await很接近,表示幾乎沒有I/O等待,磁盤性能很好,如果await的值遠高于svctm的值,則表示I/O隊列等待太長,系統(tǒng)上運行的應用程序?qū)⒆兟?#xff0c;此時可以通過更換更快的硬盤來解決問題。正常情況下svctm應該是小于await值的,而svctm的大小和磁盤性能有關,CPU、內(nèi)存的負荷也會對svctm值造成影響,過多的請求也會間接的導致svctm值的增加。
%util項的值也是衡量磁盤I/O的一個重要指標,如果%util接近100%,表示磁盤產(chǎn)生的I/O請求太多,I/O系統(tǒng)已經(jīng)滿負荷的在工作,該磁盤可能存在瓶頸。長期下去,勢必影響系統(tǒng)的性能。參考:深入理解iostat命令,哪些指標比較重要?
4、其他輸入?yún)?shù)說明:
參數(shù)詳解
-c: 僅顯示CPU統(tǒng)計信息,與-d選項互斥
-d:僅顯示磁盤統(tǒng)計信息,與-c選項互斥
-h:使用NFS(Network File System網(wǎng)絡文件系統(tǒng))的輸出報告,更加友好可讀。需要使用-n參數(shù)開啟NFS。
-k:以 kb 為單位顯示,默認情況下,iostat的輸出是以block作為計量單位,加上這個參數(shù)可以以kb作為計量單位顯示。(該參數(shù)僅在linux內(nèi)核版本2.4以后數(shù)據(jù)才是準確的)
-m:以 mb 為單位顯示(該參數(shù)僅在linux內(nèi)核版本2.4以后數(shù)據(jù)才是準確的)
-N:顯示磁盤陣列(LVM) 信息。
-V:顯示版本信息
-x:顯示更詳細的磁盤報告信息,默認只顯示六列,加上該參數(shù)后會顯示更詳細的信息(該參數(shù)僅在linux內(nèi)核版本2.4以后數(shù)據(jù)才是準確的)
-n:顯示NFS(Network File System網(wǎng)絡文件系統(tǒng)) 使用情況(該參數(shù)僅在linux內(nèi)核版本2.6.17以后有效)
-t:輸出報告時顯示系統(tǒng)時間
-p:[ { device [,…] | ALL } ] 顯示磁盤分區(qū)的相關統(tǒng)計信息(默認粒度只到磁盤,沒有顯示具體的邏輯分區(qū))
-y:跳過不顯示第一次報告的數(shù)據(jù),因為iostat使用的是采樣統(tǒng)計,所以iostat的第一次輸出的數(shù)據(jù)是自系統(tǒng)啟動以來的累計的數(shù)據(jù)
-y 這個參數(shù)非常重要,因為第一次數(shù)據(jù)不屬于正常數(shù)據(jù),所以如果做數(shù)據(jù)統(tǒng)計時,計入了統(tǒng)計,會影響最終數(shù)據(jù)結(jié)果-z:只顯示在采樣周期內(nèi)有活動的磁盤
-j:{ ID | LABEL | PATH | UUID | … } 磁盤列表的Device列要用什么維度來描述磁盤
示例
- 每隔 1秒刷新顯示,顯示3次
iostat 1 3
- 每隔 2秒刷新顯示詳細信息,顯示3次
iostat -x 2 3
- 每隔 1秒刷新,顯示CPU統(tǒng)計信息3次
iostat -c 1 3
- 每隔 1秒刷新顯示詳細信息,顯示3次,去除第1次
iostat -x -y 1 3
參考:iostat 命令詳解
Linux 中iostat 命令詳解(重要),分析可看。
Linux iostate命令實戰(zhàn)
https://blog.csdn.net/m369880395/article/details/127789732
磁盤性能指標—IOPS、吞吐量及測試_最大iops