一、磁盤原理
設備又名I/O設備,泛指計算機系統中除主機以外的所有外部設備。
1.1 計算機分類
1.1.1 按照信息傳輸速度分:
1.低速設備:每秒傳輸信息僅幾個字節或者百個字節,如:鍵盤、鼠標等
2.中速設備:每秒傳輸信息數千個字節或者數萬個字節,如:打印機
3.高速設備:每秒傳輸信息數數10萬個字節,如:磁盤
1.1.2 按照信息交換單位分
1.字符設備:以字符為輸入/輸出信息的單位,如:鍵盤,顯示終端
2.塊設備:以數據塊為單位輸入/輸出信息,如:磁盤
注:何為數據塊:磁盤中常以一個扇區作為一個數據塊,一個扇區就是一個讀寫單位
一、磁盤性能指標
1、測試磁盤性能,使用命令:dd
因數據寫入磁盤,可能是緩存寫,直接寫(不經過緩沖區直接寫入磁盤),順序io,隨機io的區別所以,這種dd測試並不是很准確。
這不是一個專業的測試工具,不過如果對於測試結果的要求不是很苛刻的話,平時可以使用來對磁盤的讀寫速度作一個簡單的評估.
在使用前首先了解兩個特殊設備
/dev/null 偽設備,回收站.寫該文件不會產生IO
/dev/zero 偽設備,會產生空字符流,對它不會產生IO
測試磁盤寫速率 [root@localhost ~]# time dd if=/dev/zero of=/test.dbf bs=8k count=300000 #注意:會在根目錄下產生一個test.dbf文件,記得測試完后刪除 300000+0 records in 300000+0 records out 2457600000 bytes (2.5 GB) copied, 68.191 seconds, 36.0 MB/s #寫速率36MB/s real 1m13.960s user 0m0.077s sys 0m5.272s
測試磁盤讀速率 [root@localhost ~]# time dd if=/test.dbf of=/dev/null bs=8k #讀test.dbf文件 300000+0 records in 300000+0 records out 2457600000 bytes (2.5 GB) copied, 36.2647 seconds, 67.8 MB/s #讀速率67.8MB/s real 0m36.331s user 0m0.018s sys 0m2.823s
二、磁盤性能監控
2.1 linux系統監控
2.1.1獲取IOPS
[root@localhost ~]# iostat -m 3 Linux 2.6.18-238.el5 (localhost.localdomain) 08/03/2017 avg-cpu: %user %nice %system %iowait %steal %idle 0.01 0.09 0.87 0.87 0.00 98.16 Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn sda 6.91 0.44 0.36 6162 5009 sda1 0.01 0.00 0.00 1 0 sda2 6.90 0.44 0.36 6161 5009 dm-0 100.40 0.44 0.36 6160 5009 dm-1 0.01 0.00 0.00 0 0
- tps:該設備每秒的傳輸次數(Indicate the number of transfers per second that were issued to the device.)。
"一次傳輸"意思是"一次I/O請求"。多個邏輯請求可能會被合並為"一次I/O請求"。"一次傳輸"請求的大小是未知的。
- MB_read/s:每秒從設備(drive expressed)讀取的數據量;
- MB_wrtn/s:每秒向設備(drive expressed)寫入的數據量;
- MB_read:讀取的總數據量;
- MB_wrtn:寫入的總數量數據量;這些單位都為Kilobytes。
從這條命令中:我們知道:IOPS(每秒io請求數)是:6.91。當前讀速率是:0.44MB/s .寫速率是:0.36MB/s
2.1.2 獲取IOPS、io隊列、io等待、io響應時間等
[root@localhost ~]# iostat -xm 3 #m 代表以MB為單位顯示。 Linux 2.6.18-238.el5 (localhost.localdomain) 08/03/2017avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 3.67 23.14 0.00 73.19
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
sda 304.67 0.33 636.00 3.33 76.76 0.01 245.93 2.40 3.53 1.56 99.87
sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sda2 304.67 0.33 636.00 3.33 76.76 0.01 245.93 2.40 3.53 1.56 99.87
dm-0 0.00 0.00 941.33 3.67 76.78 0.01 166.43 3.25 3.30 1.06 99.87
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
- rrqm/s: 每秒對該設備的讀請求被合並次數,文件系統會對讀取同塊(block)的請求進行合並
- wrqm/s: 每秒對該設備的寫請求被合並次數
- r/s: 每秒完成的讀請求次數
- w/s: 每秒完成的寫請求次數
- rkB/s: 每秒讀數據量(kB為單位)
- wkB/s: 每秒寫數據量(kB為單位)
- avgrq-sz:平均每次IO操作的數據量(扇區數為單位)
- avgqu-sz: 平均等待處理的IO請求隊列長度
- await: 平均每次IO請求等待時間(包括等待時間和處理時間,毫秒為單位)
- svctm: 平均每次IO請求的處理時間(毫秒為單位)
- %util: 采用周期內用於IO操作的時間比率,即IO隊列非空的時間比率
得出結論有:
每秒共有80個IO請求(IOPS=r/s+w/s),以寫為主
io服務時間為1.56毫秒,平均等待服務時間為3.53毫秒
io隊列深度為:2.4個
2.1.3 IO評估指標
2.2 iotop監控io繁忙的進程
里面最重要的參數,actual disk read 和actual disk write 分別代表實際磁盤讀寫速度
然后下面,我們可以根據每一列進行io排序,就能知道io具體消耗是哪個進程導致的。
注意:TID代表的是線程號,如果是多線程的話,可以借助command 判斷是哪個進程,也可以根據ps -eLf | grep TID 來獲取到他的父進程號。
2.2 aix/unix 系統監控
2.2.1 topas 獲取是否存在io等待
仔細觀察 “Wait”(在 CPU 部分的上部),如果改值較大則表示io可能存在瓶頸
2.2.2 獲取io隊列、IOPS、響應時間等
登錄 AIX 操作系統,輸入 topas,然后按 D,會出現如下界面:
在上圖中,hdisk2 的TPS 即為磁盤的 IOPS(每秒發出的io請求數),為 655;KBPS 即為磁盤每秒的吞吐量,為 163.9M;尤其是應該檢查 ART/AWT 和 MRT/MWT,它們表示磁盤讀寫操作的平均和最大等待時間。比較高的值表明磁盤非常忙。AQW 表示對 I/O 設備的每個請求的平均等待隊列數量。同樣,比較高的值表明磁盤的速度無法跟上請求的速度。
2.3 查找前10個大文件
find . -type f -size +100M -print0 | xargs -0 du -h | sort -nr