Skip to content

Instantly share code, notes, and snippets.

@hayajo
Created October 25, 2012 05:00
Show Gist options
  • Save hayajo/3950496 to your computer and use it in GitHub Desktop.
Save hayajo/3950496 to your computer and use it in GitHub Desktop.
標準的なツールによるサーバーの負荷調査チャート

標準的なツールによるサーバーの負荷調査チャート

「なんだかサーバーが重いな...」 と思った時の負荷調査チャート。

top(1), ps(1), netstat(8) などの標準的なツールを使用します。

ロードアベレージとは実行待ちジョブの平均数です。数値が高ければ高いほど処理が詰まっているということです。

top コマンドの1行目の右端に表示されます。

$ top
top - 10:39:09 up 2 days,  2:11,  2 users,  load average: 0.35, 0.45, 0.28
...

左から過去1分間、5分間、15分間の平均値となります。

パケットロスなどが疑われます。

netstat -i コマンドなどで確認してみましょう。

netstat -i コマンドの結果表示のRXは受信、TXは送信・転送関連の統計値です。左から正常、エラー、破棄、オーバーロードパケット数となります。

$ netstat -i
Kernel Interface table
Iface(1)   MTU(2) Met(3) RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0      1500      0    32110      0      0      0      962      0      0      0 BRU
eth1      1500      0        0      0      0      0      541      0      0      0 BRU
lo        3924      0     6080      0      0      0     6080      0      0      0 LRU

スイッチのポートをモニタリングしてみましょう。

というわけで

topの3行目がCPU使用率です。

Cpu(s):  1.0% us,  0.3% sy,  0.0% ni, 98.7% id,  0.0% wa,  0.0% hi,  0.0% si

ここで注目すべきはus、sy、waの3つです。

  • us

    ユーザー空間でCPUが使われた時間の割合。

    I/O待ちなどのボトルネックがなく、数値計算や画像変換など、純粋にCPUパワーが必要な処理を行なっている状態。

  • sy

    カーネル空間でCPUが使われた時間の割合。

    I/O待ちでCPU時間を消費したり、大きいプロセスを高頻度でforkしている状態。

  • wa

    CPUがディスクのI/O待ちをしていた時間の割合。

    read/writeなどの応答待ちをしている状態。

これらの値を確認して次のような判断をします。

topをCPU使用率でソートしてCPU使用率が高いプロセスを見つけます。(Shift-Oでソートメニュー表示)

プロセス番号を控えてpsコマンドで状態(STAT)を確認します。

  • 「R」の場合は「実行中もしくは実行可能だけどCPUに空きがないため実行できない状態」です。
  • 「D」の場合は「割り込み不可能な待機状態。大抵I/O待ち状態」です。

原因と思われるプロセスは見つかりましたか?

というわけで

syと併せてwaも確認します。

waが高い場合はI/O待ちが原因となります。

vmstatでI/O待ちの状況を確認してみましょう。

$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 228896  61828  40804    0    0    92    48  101   56  0  7 92  1  0
 2  0      0   5656  61808 261540    0    0     0 207668 2700 1048  0 100  0  0  0
 1  1      0   6268  61808 260580    0    0   188 263768 3161 1607  1 99  0  0  0
 2  1      0   5648  61812 261636    0    0   188 248708 3018 1455  1 99  0  0  0
 0  2      0   6128  61848 258920    0    0    36 85584  761  390  1 24  0 75  0
 0  1      0   6252  61848 258760    0    0     0 15360  163   51  0  2  0 98  0
 0  3      0   6484  61852 258428    0    0     0 15364  241  152  0 10  0 90  0
 0  3      0   6732  61852 258408    0    0     0 15408  172   58  0  2  0 98  0
 1  2      0   5988  61852 259328    0    0     0 20480  208   96  0  7  0 93  0

b の数値がI/O待ちのプロセス数です。b の数値が高いときに wa の数値も高くなっていますね。

4. CPUを浪費しているプロセスを探しましょう へ。

メモリを大量に消費しているプロセスがあってスワップが発生しているかもしれません。

topでmを押すとシステムのメモリとスワップの使用状況がトグルします。まずはこれで確認します。

Mem:   1034348k total,   709724k used,   324624k free,    10640k buffers
Swap:  1748984k total,     6000k used,  1742984k free,   552664k cached

スワップが発生している場合はメモリ使用率でソートしてプロセスを特定しましょう。

原因と思われるプロセスは見つかりましたか?

というわけで

しっかりと対処しましょう。

あわせて読みたい

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment