指標を読む
# uptime
15:40:33 up 357 days, 22:34, 2 users, load average: 0.19, 0.17, 0.12
- コマンド
- uptime。load averageに続く3つの数字が過去1分間、5分間、15分間の平均値を表します。
- 意味
- 処理を実行したいが、
なにかしらの要因で
実行を待たされているプロセスの数を表します。したがって、ロードアベレージが高い状態とは多くのプロセスが処理を実行できずに待たされている状態、ということになります。
- 解釈
- なにかしらの要因としては「ほかのプロセスにCPUが使われていて、空くのを待っている状態」と「ディスクに読み書き要求を発行していて、その結果を待っている状態」の二種類が考えられます。前者は「CPU使用率」、後者は「I/O待ち率」として数値化することができます。ロードアベレージを見ただけでは原因を切り分けることはできないため、次にCPU負荷が高いのか、I/O負荷が高いのかの切り分けに進むことになります。一方、ロードアベレージが低い(のにスループットが上がらない)場合は、ネットワーク的な要因(パケットロスなど)を疑うことになります。
# sar
Linux 2.6.18-194.32.1.el5 (rm21881198) 2012年01月05日
00時00分01秒 CPU %user %nice %system %iowait %steal %idle
00時10分01秒 all 1.73 0.01 0.35 0.72 0.00 97.19
00時20分01秒 all 1.73 0.01 0.33 0.82 0.00 97.11
00時30分01秒 all 1.62 0.01 0.35 0.85 0.00 97.17
00時40分01秒 all 1.55 0.01 0.34 0.88 0.00 97.22
00時50分01秒 all 1.15 0.01 0.28 0.54 0.00 98.02
- コマンド
- sar
- 意味
- %userがユーザー空間でCPUが使われた時間の割合、%systemがシステム空間でCPUが使われた時間の割合を表します。割合は百分率です。
- 解釈
- %userが高い場合は、ユーザー空間のプロセスがCPUを消費しています。よくある要因としては「純粋にCPUパワーが必要な処理(数値計算、画像や動画の変換など)を行っている」ことや「意図しない暴走でCPUを消費している」ことが考えられます。前者はCPUをより高性能なものに交換したり、アルゴリズムを見直して処理効率を改善するといった対策が考えられます。後者は原因を突き止めて暴走を停止する必要があります。一方、%systemが高い場合は、システム空間のプロセスがCPUを消費しています。よくある要因としては「I/O待ちでCPU時間を消費している」ことや「大きめのプロセスを頻繁にforkしている」ことが考えられます。
I/O待ち率
- コマンド
- sar
- 意味
- %iowaitがCPUがディスクI/Oの結果を待っていた時間の割合を表します。
- 解釈
- %iowaitと%systemがともに高い場合は、readやwriteの応答を待ってI/O待ちが発生しています。これは、I/O待ちが発生するとreadやwriteのシステムコールに要する時間も増えるため、%systemも上昇するためです。逆に、%iowaitが高いにもかかわらず%systemが低い場合は、物理メモリ量を超えてメモリを使ってしまい、スワップが大量に発生している可能性があります。この場合は、sar -Wコマンドでスワップ頻度を、freeコマンドでメモリ使用状況を、topコマンドをメモリ使用率でソートしてメモリを消費しているプロセスを確認します。
# sar -W
Linux 2.6.18-194.32.1.el5 (rm21881198) 2012年01月05日
00時00分01秒 pswpin/s pswpout/s
00時10分01秒 0.00 0.00
00時20分01秒 0.00 0.00
00時30分01秒 0.00 0.00
00時40分01秒 0.00 0.00
00時50分01秒 0.00 0.00
- コマンド
- sar -W
メモリ使用状況
# free
total used free shared buffers cached
Mem: 24660136 24534520 125616 0 236268 10033728
-/+ buffers/cache: 14264524 10395612
Swap: 50331636 152 50331484
- コマンド
- free
プロセス毎のメモリ使用率
# top
top - 15:50:42 up 357 days, 22:44, 2 users, load average: 0.20, 0.17, 0.12
Tasks: 163 total, 1 running, 162 sleeping, 0 stopped, 0 zombie
Cpu(s): 1.2%us, 0.2%sy, 0.0%ni, 97.0%id, 1.5%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 24660136k total, 24531064k used, 129072k free, 236352k buffers
Swap: 50331636k total, 152k used, 50331484k free, 10030204k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6516 mysql 15 0 13.9g 13g 5932 S 11.0 56.0 96039:24 mysqld
3391 root 15 0 154m 8116 4100 S 0.0 0.0 22:33.12 snmpd
32292 ntp 15 0 19832 5528 4424 S 0.0 0.0 0:00.02 ntpd
3513 named 19 0 283m 4656 1996 S 0.0 0.0 0:20.97 named
3234 haldaemo 15 0 31196 4364 1680 S 0.0 0.0 0:05.80 hald
- コマンド
- top
原因プロセスを特定する
# ps -lp 6516
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 27 6516 5984 22 75 0 - 3640236 725761 ? 66-16:48:21 mysqld
CPU使用率が高い場合は、topコマンドをCPU使用率でソートしてCPUを消費しているプロセスのPIDを確認し、psでプロセスの情報を表示します。STATが「R」であれば、「実行中または実行可能(だけど実行待ち)」なので、そのプロセスが原因の可能性が高いと判断できます。
I/O使用率が高い場合は、topコマンドをCPU使用率(%systemが高い場合)やメモリ使用率(%systemが低い場合)でソートしてプロセスのPIDを確認し、psでプロセスの情報を表示します。STATが「D」であれば、「割り込み不可能な待機状態(普通はI/O)」なので、そのプロセスが原因の可能性が高いと判断できます。
topコマンドの操作コマンド
M |
メモリ使用量が多いもの順 |
N |
プロセスID順 |
P |
CPUの使用時間率の長いもの順 |
R |
ソート順の逆転 |
T |
実行時間が長い順 |
q |
topコマンドの終了 |
s |
表示の更新間隔(単位は秒) |
u |
特定のユーザー権限のプロセスだけ |
psコマンドのSTAT(ステータス)
PROCESS STATE CODES
Here are the different values that the s, stat and state output specifiers
(header "STAT" or "S") will display to describe the state of a process.
D Uninterruptible sleep (usually IO)
R Running or runnable (on run queue)
S Interruptible sleep (waiting for an event to complete)
T Stopped, either by a job control signal or because it is being traced.
W paging (not valid since the 2.6.xx kernel)
X dead (should never be seen)
Z Defunct ("zombie") process, terminated but not reaped by its parent.
For BSD formats and when the stat keyword is used, additional characters may be
displayed:
< high-priority (not nice to other users)
N low-priority (nice to other users)
L has pages locked into memory (for real-time and custom IO)
s is a session leader
l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
+ is in the foreground process group
おなじみのtopコマンドは右上にロードアベレージを表示します。
# top
top - 18:52:32 up 80 days, 15 min, 1 user, load average: 0.58, 0.78, 0.88
Tasks: 164 total, 1 running, 163 sleeping, 0 stopped, 0 zombie
Cpu(s): 4.2%us, 0.2%sy, 0.0%ni, 95.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 24659372k total, 11901752k used, 12757620k free, 302260k buffers
Swap: 50331636k total, 0k used, 50331636k free, 8835812k cached
/proc/loadavgは左から1分間、5分間、15分間の平均値、4番目が現在実行しているプロセス数/総プロセス数、5番目が最後に使用されたプロセスIDを意味します。
# cat /proc/loadavg
1.16 0.91 0.91 3/527 28107
sarコマンドで統計情報を知る
sar -u |
CPU使用率を表示する |
sar -b |
ディスクI/Oの使用状況を表示する |
sar -W |
スワップ頻度を表示する |
sar -q |
ロードアベレージやrunqの大きさを表示する |
sar -r |
メモリの使用状況を表示する |
sar -P {0, 1, ... | ALL} |
プロセッサごとに統計値を表示する |
sar -f /var/log/sa/sann |
日付を指定して過去の統計情報を表示する |
sar -A |
すべての情報を表示する |
# sar -u
Linux 2.6.18-274.3.1.el5 (rm25221198) 2012年01月05日
00時00分01秒 CPU %user %nice %system %iowait %steal %idle
00時10分01秒 all 13.13 0.01 0.28 0.05 0.00 86.54
00時20分01秒 all 12.43 0.01 0.26 0.05 0.00 87.25
00時30分01秒 all 17.87 0.01 0.28 0.06 0.00 81.79
00時40分01秒 all 15.84 0.01 0.27 0.06 0.00 83.83
00時50分01秒 all 13.58 0.01 0.43 0.05 0.00 85.93
# sar -b
Linux 2.6.18-194.32.1.el5 (rm21881198) 2012年01月05日
00時00分01秒 tps rtps wtps bread/s bwrtn/s
00時10分01秒 161.93 16.75 145.17 534.30 6523.02
00時20分01秒 159.18 16.17 143.01 515.57 6404.59
00時30分01秒 160.00 18.54 141.46 591.59 6130.04
00時40分01秒 141.71 12.19 129.51 388.39 5485.18
00時50分01秒 132.08 10.21 121.87 325.98 5407.91
# sar -W
Linux 2.6.18-274.3.1.el5 (rm25221198) 2012年01月05日
00時00分01秒 pswpin/s pswpout/s
00時10分01秒 0.00 0.00
00時20分01秒 0.00 0.00
00時30分01秒 0.00 0.00
00時40分01秒 0.00 0.00
00時50分01秒 0.00 0.00
# sar -q
Linux 2.6.18-274.3.1.el5 (rm25221198) 2012年01月05日
00時00分01秒 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
00時10分01秒 4 726 0.51 0.91 1.15
00時20分01秒 4 755 1.50 1.05 1.06
00時30分01秒 1 755 1.06 1.31 1.24
00時40分01秒 0 333 1.60 1.42 1.29
00時50分01秒 0 523 1.19 1.10 1.15
# sar -r
Linux 2.6.18-274.3.1.el5 (rm25221198) 2012年01月05日
00時00分01秒 kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad
00時10分01秒 13167640 11491732 46.60 301488 8467272 50331636 0 0.00 0
00時20分01秒 13157192 11502180 46.64 301492 8475636 50331636 0 0.00 0
00時30分01秒 13145024 11514348 46.69 301504 8486788 50331636 0 0.00 0
00時40分01秒 13150916 11508456 46.67 301516 8497012 50331636 0 0.00 0
00時50分01秒 13134316 11525056 46.74 301540 8505956 50331636 0 0.00 0
# sar -P ALL
Linux 2.6.18-274.3.1.el5 (rm25221198) 2012年01月05日
00時00分01秒 CPU %user %nice %system %iowait %steal %idle
00時10分01秒 all 13.13 0.01 0.28 0.05 0.00 86.54
00時10分01秒 0 4.74 0.00 0.12 0.32 0.00 94.81
00時10分01秒 1 15.49 0.01 0.34 0.01 0.00 84.15
00時10分01秒 2 17.32 0.01 0.23 0.01 0.00 82.44
00時10分01秒 3 16.47 0.01 0.36 0.01 0.00 83.15
00時10分01秒 4 6.41 0.00 0.30 0.07 0.00 93.23
00時10分01秒 5 21.23 0.01 0.32 0.01 0.00 78.44
00時10分01秒 6 3.97 0.01 0.24 0.00 0.00 95.79
00時10分01秒 7 19.39 0.01 0.32 0.00 0.00 80.28
...
平均値: CPU %user %nice %system %iowait %steal %idle
平均値: all 9.13 0.01 0.21 0.04 0.00 90.61
平均値: 0 3.28 0.00 0.10 0.20 0.00 96.42
平均値: 1 11.85 0.01 0.28 0.01 0.00 87.85
平均値: 2 11.65 0.01 0.18 0.00 0.00 88.16
平均値: 3 11.98 0.01 0.28 0.00 0.00 87.72
平均値: 4 3.07 0.00 0.15 0.09 0.00 96.69
平均値: 5 14.50 0.01 0.25 0.00 0.00 85.23
平均値: 6 2.35 0.01 0.20 0.00 0.00 97.44
平均値: 7 14.37 0.01 0.28 0.00 0.00 85.34
# sar -f /var/log/sa/sa28
Linux 2.6.18-274.3.1.el5 (rm25221198) 2011年12月28日
00時00分01秒 CPU %user %nice %system %iowait %steal %idle
00時10分01秒 all 5.42 0.01 0.21 0.04 0.00 94.33
00時20分01秒 all 6.49 0.01 0.20 0.04 0.00 93.26
00時30分01秒 all 5.63 0.01 0.18 0.04 0.00 94.14
00時40分01秒 all 5.51 0.01 0.18 0.04 0.00 94.26
00時50分01秒 all 5.27 0.01 0.17 0.04 0.00 94.51