top 命令經過查看 CPU 的 wa% 值來判斷當前磁盤 IO 性能,若是這個數值過大,極可能是磁盤 IO 過高了,固然也多是其餘緣由,例如網絡 IO 太高等。html
top命令的其餘參數表明的含義詳見top命令詳解
linux
sar 命令是分析系統瓶頸的神器,能夠用來查看 CPU 、內存、磁盤、網絡等性能。ios
sar 命令查看當前磁盤性能的命令爲:緩存
[root@server-68.2.stage.polex.io var ]$ sar -d -p 1 2 Linux 3.10.0-693.5.2.el7.x86_64 (server-68) 03/11/2019 _x86_64_ (64 CPU) 02:28:54 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 02:28:55 PM sda 1.00 0.00 3.00 3.00 0.01 9.00 9.00 0.90 02:28:55 PM sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 02:28:55 PM polex_pv-rootvol 1.00 0.00 3.00 3.00 0.01 9.00 9.00 0.90 02:28:55 PM polex_pv-varvol 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 02:28:55 PM polex_pv-homevol 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 02:28:55 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 02:28:56 PM sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 02:28:56 PM sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 02:28:56 PM polex_pv-rootvol 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 02:28:56 PM polex_pv-varvol 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 02:28:56 PM polex_pv-homevol 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util Average: sda 0.50 0.00 1.50 3.00 0.00 9.00 9.00 0.45 Average: sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: polex_pv-rootvol 0.50 0.00 1.50 3.00 0.00 9.00 9.00 0.45 Average: polex_pv-varvol 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: polex_pv-homevol 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
其中, 「-d」參數表明查看磁盤性能,「-p」參數表明將 dev 設備按照 sda,sdb……名稱顯示,「1」表明每隔1s採起一次數值,「2」表明總共採起2次數值。網絡
await:平均每次設備 I/O 操做的等待時間(以毫秒爲單位)。 oop
svctm:平均每次設備 I/O 操做的服務時間(以毫秒爲單位)。性能
%util:一秒中有百分之幾的時間用於 I/O 操做。 測試
對於磁盤 IO 性能,通常有以下評判標準:優化
正常狀況下 svctm 應該是小於 await 值的,而 svctm 的大小和磁盤性能有關,CPU 、內存的負荷也會對 svctm 值形成影響,過多的請求也會間接的致使 svctm 值的增長。spa
await 值的大小通常取決與 svctm 的值和 I/O 隊列長度以 及I/O 請求模式,若是 svctm 的值與 await 很接近,表示幾乎沒有 I/O 等待,磁盤性能很好,若是 await 的值遠高於 svctm 的值,則表示 I/O 隊列等待太長,系統上運行的應用程序將變慢,此時能夠經過更換更快的硬盤來解決問題。
%util 項的值也是衡量磁盤 I/O 的一個重要指標,若是 %util 接近 100% ,表示磁盤產生的 I/O 請求太多,I/O 系統已經滿負荷的在工做,該磁盤可能存在瓶頸。長期下去,勢必影響系統的性能,能夠經過優化程序或者經過更換更高、更快的磁盤來解決此問題。
默認狀況下,sar從最近的0點0分開始顯示數據;若是想繼續查看一天前的報告;能夠查看保存在/var/log/sa/下的sar日誌:
[root@server-68.2.stage.polex.io var ]$ sar -d -p -f /var/log/sa/sa11 | more
Linux 3.10.0-693.5.2.el7.x86_64 (server-68) 03/11/2019 _x86_64_ (64 CPU) 09:50:01 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 10:00:01 AM sda 0.51 0.00 9.06 17.82 0.02 37.65 14.65 0.74 10:00:01 AM sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:00:01 AM polex_pv-rootvol 0.22 0.00 2.50 11.56 0.01 37.44 14.10 0.31 10:00:01 AM polex_pv-varvol 0.30 0.00 6.55 21.97 0.01 38.55 14.73 0.44 10:00:01 AM polex_pv-homevol 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:10:01 AM sda 0.79 3.45 13.18 21.06 0.04 51.81 11.03 0.87 10:10:01 AM sdb 0.04 3.45 0.00 86.33 0.00 0.25 0.25 0.00 10:10:01 AM polex_pv-rootvol 0.26 0.00 3.08 11.85 0.01 50.21 17.88 0.46 10:10:01 AM polex_pv-varvol 0.54 3.45 10.10 24.95 0.03 52.58 7.49 0.41 10:10:01 AM polex_pv-homevol 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:20:01 AM sda 0.65 0.00 10.43 16.11 0.03 38.67 10.99 0.71 10:20:01 AM sdb 0.04 3.46 0.00 86.33 0.00 0.08 0.08 0.00
iostat主要用於監控系統設備的 IO 負載狀況,iostat 首次運行時顯示自系統啓動開始的各項統計信息,以後運行 iostat 將顯示自上次運行該命令之後的統計信息。用戶能夠經過指定統計的次數和時間來得到所需的統計信息。
[root@server-68.2.stage.polex.io var ]$ iostat -dxk 1 2 Linux 3.10.0-693.5.2.el7.x86_64 (server-68) 03/11/2019 _x86_64_ (64 CPU) Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.06 0.32 2.08 1.44 72.78 61.81 0.14 59.32 0.51 68.37 5.68 1.36 sdb 0.00 0.00 0.03 0.00 1.15 0.00 86.32 0.00 0.17 0.17 0.00 0.16 0.00 dm-0 0.00 0.00 0.00 0.24 0.02 1.56 13.22 0.01 44.55 6.36 44.71 13.25 0.32 dm-1 0.00 0.00 0.32 1.90 1.32 71.22 65.30 0.14 62.43 0.49 72.79 4.75 1.06 dm-2 0.00 0.00 0.00 0.00 0.00 0.00 26.79 0.00 28.06 4.68 38.98 5.18 0.00 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 0.00 3.00 0.00 16.00 10.67 0.26 86.33 0.00 86.33 42.33 12.70 sdb 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 dm-0 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 dm-1 0.00 0.00 0.00 3.00 0.00 16.00 10.67 0.26 86.33 0.00 86.33 42.33 12.70 dm-2 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
該命令的結果與上面 sar -d -p 1 2 命令相似,實際使用中主要仍是看 await svctm %util 參數。
vmstat 命令使用方法很簡單:
[root@server-68.2.stage.polex.io var ]$ vmstat 2 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 3 0 0 93221488 4176 69117136 0 0 0 1 0 0 4 1 94 0 0 2 0 0 93226048 4176 69117128 0 0 0 0 33326 36671 18 2 80 0 0 1 0 0 93218776 4176 69117104 0 0 0 9 26225 21588 18 2 80 0 0 1 0 0 93226072 4176 69117072 0 0 0 0 13271 25857 5 0 94 0 0 0 0 0 93223984 4176 69117040 0 0 0 5 34637 24444 20 2 78 0 0 11 0 0 93219248 4176 69117184 0 0 0 0 30736 20671 8 2 90 0 0
輸出結果中,bi bo 能夠表示磁盤當前性能:
bi 塊設備每秒接收的塊數量,這裏的塊設備是指系統上全部的磁盤和其餘塊設備,默認塊大小是 1024 byte 。
bo 塊設備每秒發送的塊數量,例如咱們讀取文件,bo 就要大於0。bi 和 bo 通常都要接近 0,否則就是 IO 過於頻繁,須要調整。
hdparm 命令提供了一個命令行的接口用於讀取和設置IDE或SCSI硬盤參數,注意該命令只能測試磁盤的讀取速率。
例如,測試 sda 磁盤的讀取速率:
[root@server-68.2.stage.polex.io var ]$ hdparm -Tt /dev/polex_pv/varvol /dev/polex_pv/varvol: Timing cached reads: 15588 MB in 2.00 seconds = 7803.05 MB/sec Timing buffered disk reads: 1128 MB in 3.01 seconds = 374.90 MB/sec
從測試結果看出,帶有緩存的讀取速率爲:7803.05MB/s ,磁盤的實際讀取速率爲:374.90 MB/s 。
Linux dd 命令用於讀取、轉換並輸出數據。dd 可從標準輸入或文件中讀取數據,根據指定的格式來轉換數據,再輸出到文件、設備或標準輸出。
咱們能夠利用 dd 命令的複製功能,測試某個磁盤的 IO 性能,需要注意的是 dd 命令只能大體測出磁盤的 IO 性能,不是很是準確。
測試寫性能命令:
[root@server-68.2.stage.polex.io var ]$ time dd if=/dev/zero of=test.file bs=1G count=2 oflag=direct 2+0 records in 2+0 records out 2147483648 bytes (2.1 GB) copied, 13.5487 s, 159 MB/s real 0m13.556s user 0m0.000s sys 0m0.888s
能夠看到,該分區磁盤寫入速率爲 159M/s,其中:
測試讀性能命令:
[root@server-68.2.stage.polex.io var ]$ dd if=test.file of=/dev/null iflag=direct 4194304+0 records in 4194304+0 records out 2147483648 bytes (2.1 GB) copied, 4.87976 s, 440 MB/s
能夠看到,該分區的讀取速率爲 440MB/s
fio 命令是專門測試 iops 的命令,比 dd 命令準確,fio 命令的參數不少,這裏舉幾個例子供你們參考:
順序讀:
fio -filename=/var/test.file -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_r
隨機寫:
fio -filename=/var/test.file -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_randw
順序寫:
fio -filename=/var/test.file -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_w
混合隨機讀寫:
fio -filename=/var/test.file -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_r_w -ioscheduler=noop
參考連接:
https://elf8848.iteye.com/blog/2168876
https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/sar.html
http://blog.sina.com.cn/s/blog_62b832910102w3zt.html
https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858810.html
https://linux.cn/article-6104-1.html
http://www.runoob.com/linux/linux-comm-hdparm.html