IO負荷の原因究明

悪さをしているシステムを調査したいというモチベーションの記事です。 コマンドの出力結果は、サーバに負荷をかけていないため参考になりません。。。

vmstat

# 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
 0  0      0 650984  19148 283696    0    0    29    76   20   40  0  0 99  0  0    
 0  0      0 651000  19148 283720    0    0     0     0   11   12  0  0 100  0  0   
 0  0      0 651000  19148 283720    0    0     0     0    9   12  0  0 100  0  0   
 0  0      0 651000  19148 283720    0    0     0     0    6    8  0  0 100  0  0

指定した秒数間隔でIO負荷を見てくれます。 システム全体なので、プロセスごとに見れません。

sar

# sar
Linux 4.4.41-36.55.amzn1.x86_64 (ip-172-30-2-131)   02/21/2017  _x86_64_    (1 CPU)

02:00:01 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
02:10:01 AM     all      0.10      0.00      0.07      0.01      0.01     99.81
02:20:01 AM     all      0.11      0.00      0.06      0.05      0.01     99.77
02:30:01 AM     all      0.07      0.00      0.05      0.05      0.01     99.82
02:40:01 AM     all      0.12      0.00      0.06      0.17      0.02     99.64
02:50:01 AM     all      0.04      0.00      0.04      0.05      0.00     99.87

iowaitが出ていますが、これも全体なので今回のモチベーションには合わず。。。

iostat

# iostat
Linux 4.4.41-36.55.amzn1.x86_64 (ip-172-30-2-131)   02/21/2017  _x86_64_    (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.30    0.00    0.15    0.36    0.16   99.03

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
xvda              3.20        56.87       148.35     208993     545216

これもだめ。。。

lsof

# lsof
COMMAND    PID     USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
init         1     root  cwd       DIR              202,1      4096          2 /
init         1     root  rtd       DIR              202,1      4096          2 /
init         1     root  txt       REG              202,1    150360       4673 /sbin/init
init         1     root  mem       REG              202,1     61928       2757 /lib64/libnss_files-2.17.so

*****以下略*****

全プロセス対象なのでgrep必須です。なんですが、今回のモチベーションは原因の究明なので、そもそもなにでgrepかけるんだよって話。おおよその検討がついてから使うべきコマンドですね。

iotop

# iotop
Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                     
    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 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
    4 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/0:0]
    5 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/0:0H]

topのIO版といったところでしょうか。IOの負荷が重い順に表示されています。

dstat

# dstat --top-io
----most-expensive----
     i/o process      
init        108k   70k
sshd: ec2-u 146B  216B
sshd: ec2-u  78B  152B
sshd: ec2-u  78B  152B
sshd: ec2-u  78B  152B

*****以下略*****

こんな感じのコマンドつけてやるとIO負荷が一番高いものを出してくれます。