Linux系統出現了性能問題,通常咱們能夠經過top、iostat、free、vmstat等命令來查看初步定位問題。在一個之前看到系統監控工具,總在想那些監控工具的代理,如何收集系統性能信息,io性能,cpu使用,帶寬使用等信息,偶然發現,不一樣系統均提供有性能分析工具的,代理可經過這些命令獲取系統性能信息,我的猜想,不知道具體是否是這樣的。其中iostat能夠給咱們提供豐富的IO狀態數據,下邊就來看一下iostat如何使用,命令可以輸出那些信息。linux
Linux系統中經過iostat咱們能查看到系統IO狀態信息,從而肯定IO性能是否存在瓶頸。ios
iostat是查看Linux系統io是否存在瓶頸頂好用的一個命令,可是由此而系統默認沒有安裝的,以centos系統爲例,看看如何安裝iostat命令。express
[root@localhost ~]# iostat -bash: iostat: command not found [root@localhost ~]# yum install -y sysstat
[root@localhost ~]# iostat --help Usage: iostat [ options ] [ <interval> [ <count> ] ] Options are: [ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ] [ -j { ID | LABEL | PATH | UUID | ... } [ <device> [...] | ALL ] ] [ <device> [...] | ALL ] [ -p [ <device> [,...] | ALL ] ]
iostat 主要有三個操做箱,options 操做項,interval指定統計時間間隔,count總共輸出次數
-c 參數,能夠用來插卡部分cpu狀態信息centos
[root@localhost ~]# iostat -c Linux 2.6.32-573.el6.x86_64 (localhost) 06/30/2017 _x86_64_ (4 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.02 0.00 0.00 0.00 0.00 99.98
-k 參數,某些使用block爲單位的列強制使用Kilobytes爲單位bash
[root@localhost ~]# iostat -k 1 10 Linux 2.6.32-573.el6.x86_64 (localhost) 06/30/2017 _x86_64_ (4 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.02 0.00 0.00 0.00 0.00 99.98 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.14 0.04 1.65 969915 41732790 dm-0 0.42 0.04 1.65 936269 41632492 dm-1 0.00 0.00 0.00 19920 62056 dm-2 0.00 0.00 0.00 1001 38212 dm-3 0.00 0.01 0.00 127405 7160 avg-cpu: %user %nice %system %iowait %steal %idle 0.00 0.00 0.00 0.00 0.00 100.00 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 4.00 0.00 48.00 0 48 dm-0 12.00 0.00 48.00 0 48 dm-1 0.00 0.00 0.00 0 0 dm-2 0.00 0.00 0.00 0 0 dm-3 0.00 0.00 0.00 0 0
-d 參數,顯示設備(磁盤)使用狀態併發
[root@localhost ~]# iostat -d 1 3 Linux 2.6.32-573.el6.x86_64 (localhost) 06/30/2017 _x86_64_ (4 CPU) Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 0.14 0.08 3.31 1939830 83470564 dm-0 0.42 0.07 3.30 1872538 83269968 dm-1 0.00 0.00 0.00 39840 124112 dm-2 0.00 0.00 0.00 2002 76424 dm-3 0.00 0.01 0.00 254810 14320
解釋一下輸出列表示什麼意思: tps:該設備每秒的傳輸次數(Indicate the number of transfers per second that were issued to the device.)。「一次傳輸」意思是「一次I/O請求」。多個邏輯請求可能會被合併爲「一次I/O請求」。「一次傳輸」請求的大小是未知的。 kB_read/s:每秒從設備(drive expressed)讀取的數據量;kB_wrtn/s:每秒向設備(drive expressed)寫入的數據量;kB_read:讀取的總數據量;kB_wrtn:寫入的總數量數據量;這些單位都爲Kilobytes。 上面的例子中,咱們能夠看到磁盤sda以及它的各個分區的統計數據,當時統計的磁盤總TPS是39.29,下面是各個分區的TPS。(由於是瞬間值,因此總TPS並不嚴格等於各個分區TPS的總和)
-x 參數,輸出更多詳細信息工具
[root@localhost ~]# iostat -x 1 2 Linux 2.6.32-573.el6.x86_64 (localhost) 06/30/2017 _x86_64_ (4 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.02 0.00 0.00 0.00 0.00 99.98 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.27 0.00 0.14 0.08 3.31 23.78 0.00 0.31 1.51 0.29 0.16 0.00 dm-0 0.00 0.00 0.00 0.41 0.07 3.30 8.13 0.00 2.64 2.05 2.64 0.06 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 2.29 1.61 2.51 0.08 0.00 dm-2 0.00 0.00 0.00 0.00 0.00 0.00 8.01 0.00 19.82 0.64 20.30 0.03 0.00 dm-3 0.00 0.00 0.00 0.00 0.01 0.00 30.85 0.00 0.04 0.02 0.20 0.02 0.00
解釋一下 -x參數輸出列意思 rrqm/s:每秒這個設備相關的讀取請求有多少被Merge了(當系統調用須要讀取數據的時候,VFS將請求發到各個FS,若是FS發現不一樣的讀取請求讀取的是相同Block的數據,FS會將這個請求合併Merge);wrqm/s:每秒這個設備相關的寫入請求有多少被Merge了。 rsec/s:每秒讀取的扇區數;wsec/:每秒寫入的扇區數。r/s:The number of read requests that were issued to the device per second;w/s:The number of write requests that were issued to the device per second; await:每個IO請求的處理的平均時間(單位是毫秒)。這裏能夠理解爲IO的響應時間,通常地系統IO響應時間應該低於5ms,若是大於10ms就比較大了。 %util:在統計時間內全部處理IO時間,除以總共統計時間。例如,若是統計間隔1秒,該設備有0.8秒在處理IO,而0.2秒閒置,那麼該設備的%util = 0.8/1 = 80%,因此該參數暗示了設備的繁忙程度。通常地,若是該參數是100%表示設備已經接近滿負荷運行了(固然若是是多磁盤,即便%util是100%,由於磁盤的併發能力,因此磁盤使用未必就到了瓶頸)。
iostat -d -k 1 10 #查看TPS和吞吐量信息 iostat -d -x -k 1 10 #查看設備使用率(%util)、響應時間(await) iostat -c 1 10 #查看cpu狀態
查看指定磁盤吞吐量和速率性能
[root@localhost ~]# iostat -d -d 1 1 Linux 2.6.32-573.el6.x86_64 (localhost) 06/30/2017 _x86_64_ (4 CPU) Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 0.14 0.08 3.31 1939830 83482716 dm-0 0.42 0.07 3.30 1872538 83282120 dm-1 0.00 0.00 0.00 39840 124112 dm-2 0.00 0.00 0.00 2002 76424 dm-3 0.00 0.01 0.00 254810 14320 #從結果看到平均傳輸次數0.14,每秒讀取0.08M,每秒寫3.31M
磁盤性能統計代理
[root@localhost ~]# iostat -x -k 1 1 Linux 2.6.32-573.el6.x86_64 (localhost) 06/30/2017 _x86_64_ (4 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.02 0.00 0.00 0.00 0.00 99.98 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.27 0.00 0.14 0.04 1.65 23.78 0.00 0.31 1.51 0.29 0.16 0.00