今回は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コマンド自体のオーバヘッドが大きいことは気にしておいた方がよいそうです。