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