end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

linuxチューニング (proc, sar, top でcpuボトルネックの調査)

今回はlinuxのコマンドでcpuボトルネックとなった場合の調べ方を試してみます。

/proc/〜で、cpuやメモリの情報を調べる

cpuやメモリの情報は、/proc/〜で見ることができます。

[endo@colinux ~]$ cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 13
model name      : Intel(R) Pentium(R) M processor 1.20GHz
stepping        : 8
cpu MHz         : 0.000
cache size      : 2048 KB
<略>
[endo@colinux ~]$ cat /proc/meminfo
MemTotal:       256208 kB
MemFree:        156416 kB
Buffers:          5756 kB
Cached:          53028 kB
SwapCached:          0 kB
Active:          52580 kB
Inactive:        36572 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:       256208 kB
LowFree:        156416 kB
SwapTotal:      511992 kB
SwapFree:       511992 kB
<略>

unameカーネルverを調べる

ついでにカーネルverを調べるには unameを使用します。

[endo@colinux ~]$ uname  --all
Linux colinux 2.6.11-co-0.6.4 <略>
[endo@colinux ~]$ 

sarでcpuボトルネックであることを特定する

sarコマンドがない場合、fedoraではyumでインストールして下さい。

[root@colinux /]# yum -y install sysstat

sarの解説は、次のurlを参考にさせていただきました。
http://l-w-i.net/t/solaris/admin/watch_001.txt

sar -uではcpu使用率を表示することができます。

$ sar -u
Linux 2.6.8-12smp      2008年06月26日

00時05分00秒       CPU     %user     %nice   %system   %iowait     %idle
01時05分00秒       all     35.66      0.00      2.43      0.12     61.79
02時05分00秒       all     35.10      0.00      3.13      0.18     61.58
<略>
16時05分00秒       all     49.41      0.00      3.24      0.06     47.28
17時05分01秒       all     43.20      0.00      3.01      0.08     53.71
18時04分59秒       all     34.64      0.00      3.44      0.08     61.85
平均値:            all     29.85      0.00      2.29      0.71     67.15
$ 


ここでのポイントは、次の点になるそうです。

%usr + %sys > 90
メモリ不足がシステム性能を悪化させている可能性がある。
%wio > 10の状態が継続する場合
I/O装置の性能が不足している可能性がある。


次にsar -q でプロセスキューの状態を調べてみましょう。

$ sar -q
Linux 2.6.8-12smp       2008年06月26日

00時05分00秒   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15
01時05分00秒         3       104      3.46      2.25      1.31
02時05分00秒         1        85      0.19      0.31      0.53
03時05分01秒         0        93      1.49      1.02      0.44
<略>
16時05分00秒         7       102      1.19      1.13      1.13
17時05分01秒         3        95      0.96      0.87      0.91
18時04分59秒         3        96      0.73      0.78      0.80
平均値:              3        91      0.89      0.79      0.69
$ 

ここでのポイントは、次の点になるそうです。

runq-sz / CPU数 > 2 の状態が継続
CPU負荷のため複数プロセスがCPU待ち。

topコマンドでボトルネックプロセスを調べる

cpuボトルネックであることが明らかになれば、topコマンドでボトルネックプロセスを調べることができます。

top - 18:48:55 up 165 days,  4:24,  2 users,  load average: 0.70, 0.72, 0.72
Tasks:  83 total,   1 running,  82 sleeping,   0 stopped,   0 zombie
Cpu(s): 19.9% us,  1.7% sy,  0.0% ni, 77.0% id,  1.4% wa,  0.0% hi,  0.0% si
Mem:   2075492k total,  1921544k used,   153948k free,    67952k buffers
Swap:  4194192k total,  2284704k used,  1909488k free,   854384k cached

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
   1 root      16   0  1472  484  456 S  0.0  0.0   0:09.80 init
   2 root      RT   0     0    0    0 S  0.0  0.0   1:09.73 migration/0
   3 root      34  19     0    0    0 S  0.0  0.0   0:04.06 ksoftirqd/0
   4 root      RT   0     0    0    0 S  0.0  0.0   0:46.04 migration/1
   5 root      34  19     0    0    0 S  0.0  0.0   0:02.79 ksoftirqd/1
<略>

ただし、topコマンド自体のオーバヘッドが大きいことは気にしておいた方がよいそうです。