ロードアベレージは実行中および実行待ちのプロセス、スレッドの数を集計した数値である。
サーバのリソースが許容できる数値であればいいのだが、
CPUかIOがボトルネックになり処理待ちになっているのであれば対処を検討する必要がある。
◆ 目的
①、②を特定することを目的とする。
① ボトルネックがCPUにあるにか、IOにあるのかの切り分け
② どのプロセス、スレッドが高騰させる原因を作っているのかの確認、見方の説明
◆ コマンドから現在のロードアベレージの確認
ロードアベレージを確認するコマンドは複数ある。
$ w
もしくは
$ uptime
(略)
load average: 35.58, 36.44, 34.07
ロードアベレージが35を超えているが、CPU起因か、IOに原因があるかは分からない。
※左から1分、5分、15分間の平均値で表示される。
◆ ボトルネックの確認
CPU起因か、IOが原因なのかを切り分ける。
$ vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 33 868 33356 258848 7803920 0 0 3 4 0 0 6 1 77 17 0
r: The number of processes waiting for run time.
b: The number of processes in uninterruptible sleep.
rはrun状態になっているか、run状態になる事が可能でCPU待ちの状態になっているかのどちらかである。
すべてcpu待ちにあるわけではなく、 現在running中のプロセス数も含まれることに注意が必要である。
bはdiskのI/O完了待ちになっているプロセス数である。
このシステムではIOがボトルネックになっている可能性が高い。
※当然各サーバのスペックを考慮して判断する必要がある。
ただしここからではどのプロセス、スレッドなのか確認できない。
◆ loadaverage(ロードアベレージ)に加算されるプロセス、スレッドの確認方法
psコマンドのSTATの状態から判断する。
$ ps aux -L | egrep -w "R.|D." | grep -v grep | wc -l
35
loadaverage数と合致する。
$ ps aux -L | egrep -w "R.|D." | grep -v grep
USER PID LWP %CPU NLWP %MEM VSZ RSS TTY STAT START TIME COMMAND
user 23590 12570 0.0 3046 14.9 2281140 1839224 ? Dl Jul24 3:01 application
user 23590 27141 0.0 3046 14.9 2281140 1839224 ? Dl Jul24 3:14 application
user 23590 18818 0.0 3046 14.9 2281140 1839156 ? Dl Jul24 2:36 application
user 23590 20815 0.0 3046 14.9 2281140 1839132 ? Dl Jul26 1:20 application
user 23590 10288 0.0 3045 14.8 2281140 1825828 ? Rl Jul24 2:03 application
user 23590 9952 0.3 3045 14.8 2281140 1825824 ? Rl 12:15 1:01 application
(略)
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.
< 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
RとDはvmstatのrとbと同じ意味である。
STATがSであればサーバとしては問題ない。