Version: | 1.0 of 2012/04/06 |
---|---|
Author: | SUZUKI Masashi / masasuzu |
Mail: | m15.suzuki.masashi@gmail.com |
負荷は主に2つに分類されます。
CPU負荷が高いサーバをCUPバウンドなサーバ、I/O負荷が高いサーバをI/Oバウンドなサーバと言ったりします。前者の例としてはDBサーバ、後者の例としてはアプリケーションサーバがあります。
サーバの負荷を表す指標として ロードアベレージがあります。LAと略することもあります。uptimeコマンドを叩くとロードアベレージを取得することができます。 ロードアベレージの数値は単位時間あたりの平均待ちタスクの数を表します。一般的に数値が高いほど負荷が高いと言えます。
% uptime
13:58:02 up 19 days, 19:23, 14 users, load average: 0.07, 0.04, 0.06
左側から順に、現在の時間、起動からどれくらい時間が経っているか、ログインしているユーザ数(w | wc -c 相当) 、1分間、5分間、15分間のロードアベレージ
状態 | 説明 |
---|---|
TASK_RUNNING | タスクが実行可能な状態 |
TASK_INTERRUPTIBLE | 割り込み可能な待ち状態。入力待ちなど |
TASK_UNINTERRUPTIBLE | 割り込み不可能な待ち状態。ディスクの入出力待ちなど |
TASK_STOPPED | サスペンド状態 |
TASK_ZOMBIE | ゾンビ状態 |
プロセスの状態遷移図(簡略)
実行待ち scheduling 実行中
---------> TASK_RUNNING(READY) ------------------> TASK_RUNNING
generate ^ <----------------- |
| preempt |
| |
| イベント待ち |
+----- TASK_INTERRUPTIBLE <--------+
TASK_UNINTERRUPTIBLE
wake_up sleep_on
interruptiple_wake_on interruptiple_sleep_on
プロセスの状態のうちロードアベレージに換算されるのは、TASK_RUNNINGとTASK_UNINTERRUPTIBLEのみです。 つまり、CPUの実行権限が与えられるのを待っているプロセスとディスクI/Oが完了するのを待っているプロセスのみとなります。 ロードアベレージが高い場合、どちらに起因するのかを考えなければなりません。
ちなむとpsコマンドでプロセスの実行状態を参照することができます。
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
物理メモリ、仮想メモリとかページキャッシュの話
hdparmコマンドを使うとメモリとディスクの読み込みの速度差をはかることができます。 以下の結果から100倍以上速度差があることが分かります。 I/O負荷が高いDBサーバではいかにディスクリードをさせないかが負荷対策の鍵となることがおわかりいただけると思います。
% sudo hdparm -tT /dev/sda
/dev/sda:
Timing cached reads: 12164 MB in 2.00 seconds = 6095.71 MB/sec
Timing buffered disk reads: 130 MB in 3.04 seconds = 42.17 MB/sec