io排查工具 iostat/iotop/vmstat

一、iostat安裝與用法介紹

主要用於監控系統設備的IO負載情況,iostat首次運行時顯示自系統啓動開始的各項統計信息,之後運行iostat將顯示自上次運行該命令以後的統計信息。

用戶可以通過指定統計的次數和時間來獲得所需的統計信息。

1、安裝(RedHat系列)

查看系統是否安裝這個命令

#which iostat       ##顯示如下,表示系統已經安裝了
/usr/bin/iostat
如果沒有安裝,則安裝
#yum install sysstat -y

2、語法

iostat [ -c ] [ -d ] [ -h ] [ -N ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -z ] [ device [...] | ALL ] [ -p [ device [,...] | ALL ] ] [ interval [ count ] ]
-d    表示顯示設備(磁盤)使用狀態
-x    表示顯示和io相關的擴展數據
-k    表示某些使用block爲單位的列強制使用Kilobytes爲單位

用法1:

#iostat -x -k    
Linux 2.6.18-308.el5 (Ser108)   10/31/2014
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.01    0.00    0.00    0.04    0.00   99.95
Device:         rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.97  0.01  0.58     0.20     6.29    21.98     0.02   28.71   6.81   0.40
sda1              0.00     0.00  0.00  0.00     0.00     0.00    14.83     0.00    8.87   7.90   0.00
sda2              0.00     0.00  0.00  0.00     0.00     0.00    35.35     0.00    5.23   4.60   0.00
sda3              0.00     0.97  0.01  0.58     0.20     6.29    21.98     0.02   28.71   6.81   0.40

注:如果%util接近100%,說明產生的I/O請求太多,I/O系統已經滿負載,該磁盤可能存在瓶頸。

用法2:

#iostat -d -k 2     --其中2表示數據顯示每隔2秒刷新一次
輸出如下:
Linux 2.6.18-308.el5 (Ser108)   11/05/2014
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.82         0.18         8.47     857070   39382031
sda1              0.00         0.00         0.00        869         59
sda2              0.00         0.00         0.00        760          0
sda3              0.82         0.18         8.47     855221   39381972
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              10.45         0.00       121.39          0        244
sda1              0.00         0.00         0.00          0          0
sda2              0.00         0.00         0.00          0          0
sda3             10.45         0.00       121.39          0        244

輸出信息解釋:

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,即KB

3、指定監控的設備

#iostat -d sda 2

-x  參數  該選項將用於顯示和io相關的擴展數據,可以獲取更詳細的數據,

例如:

#iostat -d -x -k 1 4    --表示每1秒刷新一次,一共刷新4次。
Device:         rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     1.29  0.01  0.81     0.18     8.47    21.18     0.03   39.95   5.98   0.49
sda1              0.00     0.00  0.00  0.00     0.00     0.00    14.73     0.00    9.71   8.75   0.00
sda2              0.00     0.00  0.00  0.00     0.00     0.00    35.35     0.00    5.23   4.60   0.00
sda3              0.00     1.29  0.01  0.81     0.18     8.47    21.18     0.03   39.95   5.98   0.49
Device:         rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda2              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda3              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
Device:         rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda2              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda3              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
Device:         rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     3.00  0.00 18.00     0.00    80.00     8.89     0.88   32.56   2.72   4.90
sda1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda2              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda3              0.00     3.00  0.00 18.00     0.00    80.00     8.89     0.88   32.56   2.72   4.90

輸出信息解釋:

rrqm/s:每秒這個設備相關的讀取請求有多少被Merge了(當系統調用需要讀取數據的時候,VFS將請求發到各個FS,如果FS發現不同的讀取請求讀取的是相同Block的數據,FS會將這個請求合併Merge);
wrqm/s:每秒這個設備相關的寫入請求有多少被Merge了。
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 沒面發出的寫入請求的數量
rkB/s: The number of kilobytes read from the device per second 以千字節每秒從設備讀取數
wkB/s: The number of kilobytes written to the device per second. 以千字節每秒從設備寫入取數
avgrq-sz 平均請求扇區的大小
avgqu-sz 是平均請求隊列的長度。毫無疑問,隊列長度越短越好。    
await:  每一個IO請求的處理的平均時間(單位是微秒毫秒)。這裏可以理解爲IO的響應時間,一般地系統IO響應時間應該低於5ms,如果大於10ms就比較大了。
         這個時間包括了隊列時間和服務時間,也就是說,一般情況下,await大於svctm,它們的差值越小,則說明隊列時間越短,反之差值越大,隊列時間越長,說明系統出了問題。         
svctm    表示平均每次設備I/O操作的服務時間(以毫秒爲單位)。如果svctm的值與await很接近,表示幾乎沒有I/O等待,磁盤性能很好,如果await的值遠高於svctm的值,則表示I/O隊列等待太長,系統上運行的應用程序將變慢。

%util: 這個值越小越好,在統計時間內所有處理IO時間,除以總共統計時間。例如,如果統計間隔1秒,該設備有0.8秒在處理IO,而0.2秒閒置,那麼該設備的%util = 0.8/1 = 80%,所以該參數暗示了設備的繁忙程度
。一般地,如果該參數是100%表示設備已經接近滿負荷運行了(當然如果是多磁盤,即使%util是100%,因爲磁盤的併發能力,所以磁盤使用未必就到了瓶頸)。
rsec/s:每秒讀取的扇區數;
wsec/: 每秒寫入的扇區數。

-c 參數,查看cpu信息

#iostat -c 1 2     #表示每1秒刷新一次,一共刷新2次
Linux 2.6.32-431.23.3.el6.x86_64 (zookeeper1)   05/27/2016      _x86_64_        (2 CPU)
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.92    0.00    0.27    0.32    0.00   98.49
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00

4、常見用法:

#iostat -d -k 1 10         #查看TPS和吞吐量信息
#iostat -d -x -k 1 10      #查看設備使用率(%util)、響應時間(await)
#iostat -c 1 10            #查看cpu狀態

5、實例分析

#iostat -d -k 1 8
Linux 2.6.32-504.el6.x86_64 (kvm5)      05/27/2016      _x86_64_        (8 CPU)
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              25.41         3.72        93.20   16601966  416182172
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              42.00         0.00       104.00          0        104
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              52.00         0.00       172.00          0        172
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              34.00         0.00       128.00          0        128
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               9.00         0.00        16.00          0         16
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              25.00         0.00        72.00          0         72
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              31.00         0.00        80.00          0         80
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              24.00         0.00        92.00          0         92
以上可以看到,磁盤每秒傳輸次數平均約30,每秒磁盤讀取較少,寫入較多,約爲100kB
#iostat -d -k -x 1 5
Linux 2.6.32-504.el6.x86_64 (kvm5)      05/27/2016      _x86_64_        (8 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     1.27    0.11   25.30     3.72    93.20     7.63     0.03    1.04   35.76    0.89   0.71   1.81
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     7.00    0.00   32.00     0.00   132.00     8.25     0.12    3.84    0.00    3.84   1.75   5.60
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     7.00    0.00   58.00     0.00   420.00    14.48     0.03    0.60    0.00    0.60   0.59   3.40
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   27.00     0.00    76.00     5.63     0.01    0.37    0.00    0.37   0.33   0.90
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    5.00     0.00    32.00    12.80     0.02    4.80    0.00    4.80   4.80   2.40
以上可以看到,磁盤的平均響應時間較小,爲0,磁盤使用率平均爲3.0左右,比較小。

二、iotop工具

1、介紹

iotop命令是專門顯示硬盤IO的命令,界面風格類似top命令。這個命令只有在kernelv2.6.20及以後的版本中才有。

2、安裝

#yum install iotop -y

3、實例

#iotop 顯示如下,可以看到有一個進程,io佔用比較多
Total DISK READ: 6.42 M/s | Total DISK WRITE: 0.00 B/s    
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                                                                                                         
 1476 be/4 root        6.42 M/s    0.00 B/s  0.00 % 57.63 % java -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -server -Xm~2.5.4-SNAPSHOT-FERDI/lib/stax2-api-3.1.1.jar:/root/dubbo-monitor-simple-2
 1475 be/4 root        0.00 B/s   92.21 K/s  0.00 %  0.00 % java -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -server -Xm~2.5.4-SNAPSHOT-FERDI/lib/stax2-api-3.1.1.jar:/root/dubbo-monitor-simple-2
 1455 be/4 root        0.00 B/s    7.68 K/s  0.00 %  0.00 % java -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp /usr/~per.server.quorum.QuorumPeerMain /usr/local/zookeeper/bin/../conf/zoo.cfg
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
    3 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
    4 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
    5 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [stopper/0]
    6 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]
    7 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/1]
    8 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [stopper/1]
    9 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/1]
   10 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/1]
   11 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [events/0]
   12 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [events/1]
   13 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [cgroup]
   14 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [khelper]
   15 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [netns]
   16 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [async/mgr]
   17 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [pm]
   18 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [sync_supers]
   19 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [bdi-default]
   20 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kintegrityd/0]
   21 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kintegrityd/1]

2、參數

Options:
  --version             show program's version number and exit
  -h, --help            show this help message and exit
  -o, --only            only show processes or threads actually doing I/O
  -b, --batch           non-interactive mode
  -n NUM, --iter=NUM    number of iterations before ending [infinite]
  -d SEC, --delay=SEC   delay between iterations [1 second]
  -p PID, --pid=PID     processes/threads to monitor [all]
  -u USER, --user=USER  users to monitor [all]
  -P, --processes       only show processes, not all threads
  -a, --accumulated     show accumulated I/O instead of bandwidth
  -k, --kilobytes       use kilobytes instead of a human friendly unit
  -t, --time            add a timestamp on each line (implies --batch)
  -q, --quiet           suppress some lines of header (implies --batch)

二、vmstat 工具

vmstat是一個即時顯示內存使用情況的工具,一般系統自帶的都有

vmstat 使用方法:

vmstat [-V] [-n] [delay [count]]
 -V 顯示vmstat的版本;
 -n causes the headers not to be reprinted regularly.
 -a 顯示所有激活和未激活內存的狀態;print inactive/active page stats.
 -d 顯示硬盤統計信息;prints disk statistics
 -D 顯示硬盤分區表;prints disk table
 -p 顯示硬盤分區讀寫狀態等;prints disk partition statistics
 -s 顯示內存使用情況;prints vm table
 -m prints slabinfo
 -S 定義單位,k K
 delay 是兩次刷新時間間隔;
 單位體積: k:1000 K:1024 m:1000000 M:1048576 (默認是 K)
 count 刷新次數;

一個實例:

#vmstat 3 5   ##表示每3秒更新一次輸出信息,連續統計5次結束。
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 5  1      0 82471648 149068 7528352    0    0     0    12    0    1 16 18 66  0  0
 3  0      0 82471760 149068 7528352    0    0     0    72 79652 150274 17 20 63  0  0
 3  0      0 82471936 149068 7528352    0    0     0    64 79561 150275 16 20 64  0  0
 5  0      0 82471936 149068 7528352    0    0     0    88 79784 150146 17 20 62  0  0

解釋:

r  :The number of processes waiting for run time. 等待運行時間的進程數,即等待的進程數、
b  :The number of processes in uninterruptible sleep. 在等待io的進程數
swpd: 虛擬內存的使用量
free:空閒內存量
buff:緩衝區中的內存
cache:被用來做爲高速緩存的內存數
si: 從磁盤交換到內存的交換頁數量,單位:KB/秒。
so: 從內存交換到磁盤的交換頁數量,單位:KB/秒。
bi: 發送到塊設備的塊數,單位:塊/秒。
bo: 從塊設備接收到的塊數,單位:塊/秒。
in: 每秒的中斷數,包括時鐘中斷。
cs: 每秒的環境(上下文)轉換次數。
us:用戶進程使用的時間 。以百分比表示。
sy:系統進程使用的時間。 以百分比表示。
id:中央處理器的空閒時間 。以百分比表示。
wa:io等待時間
st:Time stolen from a virtual machine

轉載於:https://blog.51cto.com/linuxg/1783853

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章