カメニッキ

カメとインコと釣りの人です

Linuxサーバのレスポンスが悪い場合に、状況調査に使用するコマンドを整理

top

システム状況を表示
Linuxコマンド集 - 【 top 】 現在のシステム状況を表示する:ITpro

[vagrant@test1 ~]$ top
top - 23:04:15 up  1:21,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:  83 total,   1 running,  82 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.3%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    502160k total,   371456k used,   130704k free,    76368k buffers
Swap:  1015804k total,        0k used,  1015804k free,   166368k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1 root      20   0 19232 1492 1212 S  0.0  0.3   0:00.52 init
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0
    4 root      20   0     0    0    0 S  0.0  0.0   0:00.09 ksoftirqd/0
    5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 stopper/0
    6 root      RT   0     0    0    0 S  0.0  0.0   0:00.01 watchdog/0
    7 root      20   0     0    0    0 S  0.0  0.0   0:02.78 events/0
    8 root      20   0     0    0    0 S  0.0  0.0   0:00.00 cgroup
    9 root      20   0     0    0    0 S  0.0  0.0   0:00.00 khelper

※ 8列目に注目する
* 「R」の場合「実行状態」でCPUリソースを使用している。この時9列目が「CPU使用率」が高い値となっている場合、CPUがボトルネックとなり、遅延している可能性がある。
* 「D」の場合ストレージのI/O待ち状態となっている。
* 「S」の場合「単純にスリープしている状態」または「ネットワークを介した送受信で待ち状態になっている」となる。CPUは余裕があるのに、処理が遅いプロセスで、この状態となっている場合ネットワークがボトルネックとなっている可能性がある。

vmstat

メモリーやCPUの負荷率や使用状況を表示 Linuxコマンド集 - 【 vmstat 】 メモリーやCPUの負荷率や使用状況を表示する:ITpro

[vagrant@test1 ~]$ vmstat
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 130712  76368 166368    0    0    46     6   22   33  0  0 99  0  0

※ 「id列」「wa列」に注目する
* id列はCPUの空き状態を示す。上の例だと99%となっており、全く使用されていない
* wa列はCPUがディスクIOでまっている状態を示す。

なお、マルチプロセッサ環境の場合、平均化された値が使用される。

free

メモリの使用状況を表示
Linuxコマンド集 - 【 free 】 メモリーの使用状況を表示する:ITpro

[vagrant@test1 ~]$ free -m
             total       used       free     shared    buffers     cached
Mem:           489        482          7          0          6        388
-/+ buffers/cache:         86        402
Swap:          991          0        991

「Mem」が搭載メモリです。「free」が7MBしかなく、ほとんど全て使用されています。幸いswapは使用されいません。 待ち状態のプロセスの情報がswapされる分はOKですが、ガンガン処理しているプロセスの情報がswapにのってしまうと、パフォーマンスが悪化するので、メモリ増設が必要です。

mpstat

各CPUコアごとの使用状況を表示 Minimalインストールだと入っていないので「$ sudo yum install sysstat」

# 全てのコアを1秒間隔更新で表示
[vagrant@test1 ~]$ mpstat -P ALL 1
23時18分58秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
23時18分59秒  all    4.59    0.00    8.15    0.13    0.13    0.13    0.00    0.00   86.88
23時18分59秒    0    0.00    0.00    8.79    1.10    2.20    0.00    0.00    0.00   87.91
23時18分59秒    1   36.84    0.00   60.00    0.00    0.00    0.00    0.00    0.00    3.16
23時18分59秒    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
23時18分59秒    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
23時18分59秒    4    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
23時18分59秒    5    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
23時18分59秒    6    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
23時18分59秒    7    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

※ 一つのコアに処理が偏っていないか、見る
上の例では、裏で「$ sudo tar zcvf hoge.tgz /」を叩いてました。
2番めのCPUの使用率のみ上がっています。プロセスがマルチコアを活かせていない(対応していない)時にこうなるようです。
36%程度の使用率なのでいまいちですが、1コアに90%使用で張り付いている場合には、デーモンのスレッド数を増やすなどすることで、改善できる場合があります。
全CPUふるふるで使ってる場合はマシンスペックがそもそも足りていないと考えられます。

iostat

ストレージのI/Oを表示

[vagrant@test1 ~]$ iostat -dmxt 5
Linux 2.6.32-504.16.2.el6.x86_64 (test1)    2015年06月07日   _x86_64_    (8 CPU)

2015年06月07日 23時28分46秒
Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               2.98    33.81   11.82    1.58     0.46     0.14    91.35     0.14   10.17   2.44   3.27

「r/s」が「読み込み/秒」、「w/s」が「書き込み/秒」の表示。使用しているストレージの限界値で推移している場合、ストレージがボトルネックとなっている

vnstat

ネットワーク使用量を表示

[vagrant@test1 ~]$ sudo vnstat -i eth0 -l
Monitoring eth0...    (press CTRL-C to stop)

   rx:        0 kbit/s     0 p/s          tx:        0 kbit/s     0 p/s^C


 eth0  /  traffic statistics

                           rx         |       tx
--------------------------------------+------------------
  bytes                        6 KiB  |           6 KiB
--------------------------------------+------------------
          max               8 kbit/s  |        8 kbit/s
      average            2.82 kbit/s  |     2.82 kbit/s
          min               0 kbit/s  |        0 kbit/s
--------------------------------------+------------------
  packets                         83  |              70
--------------------------------------+------------------
          max                 14 p/s  |          12 p/s
      average                  4 p/s  |           4 p/s
          min                  0 p/s  |           0 p/s
--------------------------------------+------------------
  time                    17 seconds