如何在Linux中監視IO系統性能
dd其實(shí)是工作于比較低層的一個(gè)數據拷貝和轉換的*nix平臺的工具,但是因為dd命令支持*nix平臺的一些特殊設備,因此我們可以利用dd命令的這個(gè)特性來(lái)簡(jiǎn)單的測試磁盤(pán)的性能。
本文引用地址:http://dyxdggzs.com/article/150908.htmdd命令
先說(shuō)一下兩個(gè)相關(guān)的特殊設備
/dev/null
空設備,通常用作輸出設備,這個(gè)是*nix系統上面的黑洞,所有送到這個(gè)空設備上的內容都會(huì )憑空消失。
/dev/zero
空字符,通常用作輸入,從/dev/zero中讀取時(shí),它能源源不斷的提供空字符(ASCII NUL, 0×00)出來(lái),要多少有多少。
于是就有了下面的用法:
測試磁盤(pán)的寫(xiě)入:/usr/bin/time dd if=/dev/zero of=/tmp/foo bs=4k count=1024000
這個(gè)命令時(shí)往磁盤(pán)的文件/tmp/foo中寫(xiě)入一個(gè)4G大小的文件,當然文件的內容全部是空字符了,同時(shí)用/usr/bin/time來(lái)對命令的執行進(jìn)行計時(shí),命令中的bs指的是寫(xiě)入文件時(shí)的塊大小,其實(shí)就相當于Oracle中的block大小了,count是寫(xiě)入的塊數。采取這種方法來(lái)寫(xiě)入數據時(shí)只是測試的連續讀磁盤(pán)的性能,而不是隨機讀的性能,不能采取這種方法檢查一個(gè)機器的IOPS的,只能檢查磁盤(pán)的吞吐率。
測試磁盤(pán)的讀?。?usr/bin/time dd if=/tmp/foo of=/dev/null bs=4k
上面的命令是從/tmp/foo文件中讀取數據,然后扔掉,這里bs用的是讀取時(shí)塊的大小。和上面寫(xiě)入的命令一樣,這樣測試的僅僅是最大的讀取性能,而不是隨機IO的性能。
還能讀寫(xiě)同時(shí)測試:/usr/bin/time dd if=/tmp/foo of=/tmp/foo2 bs=4k
在上面的命令中都用到了time命令對操作進(jìn)行計時(shí),這樣才能正確的進(jìn)行判斷。要記住的一點(diǎn)是dd命令只能夠提供一個(gè)大概的測試,通過(guò)這個(gè)簡(jiǎn)單的命令可以對磁盤(pán)系統的最大性能有一個(gè)大概的了解,要了解更詳細的信息還要通過(guò)其他方法來(lái)查看。
理解iostat的各項輸出
在Linux中,我們執行一個(gè)iostat -x命令,我們能看到如下的輸出
$iostat -x
Linux 2.4.21-50a6smp (linux) 11/03/2009
avg-cpu: %user %nice %sys %iowait %idle
0.42 0.00 0.26 0.47 98.86
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
hdc 0.01 0.00 0.00 0.00 0.07 0.00 0.03 0.00 24.48 0.00 4.90 4.57 0.00
hda 0.89 8.54 0.74 4.49 12.60 104.22 6.30 52.11 22.32 0.03 5.41 1.01 0.53
我們先列舉一下各個(gè)性能指標的簡(jiǎn)單說(shuō)明。
rrqm/s:每秒進(jìn)行merge的讀操作數目。
wrqm/s:每秒進(jìn)行merge的寫(xiě)操作數目。
r/s:每秒完成的讀I/O設備次數。
w/s:每秒完成的寫(xiě)I/O設備次數。
rsec/s:每秒讀扇區數。
wsec/s:每秒寫(xiě)扇區數。
rkB/s:每秒讀K字節數。
wkB/s:每秒寫(xiě)K字節數。
avgrq-sz:平均每次設備I/O操作的數據大?。ㄉ葏^)。
avgqu-sz:平均I/O隊列長(cháng)度。
await:平均每次設備I/O操作的等待時(shí)間(毫秒)。
svctm:平均每次設備I/O操作的服務(wù)時(shí)間(毫秒)。
%util:一秒中有百分之多少的時(shí)間用于I/O操作,或者說(shuō)一秒中有多少時(shí)間I/O隊列是非空的。
評論