loadaverageとは
実行待ちプロセス数の平均数を表す値であり、サーバ負荷の指標として利用される
実行待ちプロセスについて、Linuxカーネルのプロセススケジューラが深くかかわっている
プロセススケジューラが実行するタスクの優先度を決め、順次タスクを実行したり待たせたりする
具体的にはlinuxではプロセスひとつごずつにプロセスディスクリプタという管理テーブルを作成し
ここに実行情報などを記載する。このプロセスディスクリプタ群を調整して、実行するのがプロセススケジューラの役目
プロセスディスクリプタの状態
状態 | 詳細 | ps axでのSTAT値 |
---|---|---|
TASK_RUNNING | 実行可能状態(実行待ち状態、もしくは実行中) linuxカーネルは実行待ちと実行中を区別しない | R(Run) |
TASK_INTERRUPTIBLE | 割り込み可能な待機状態。ユーザからの入力待ちなど、シグナルによって待機状態を解除可能 | S(Sleep) |
TASK_UNINTERRUPTIBLE | 割り込み不可能な待機状態。ディスクの入出力待ちなど、シグナルによる待機状態解除不可 | D(Disk sleep) |
TASK_STOPPED | 実行中断状態。サスペンドシグナルを送られて中断となった状態。 | T(Stopped) |
TASK_ZOMBIE | ゾンビ状態、子プロセスが終了し、親プロセスにリープされるまでの状態。 | Z(Zombie) |
loadaverage計算方法
上記表の、TASK_RUNNING、TASK_UNINTERRUPTIBLEの数が換算される
つまり、CPUを利用したいが他のプロセスによって待たされているプロセス数・ディスク入出力待ちのプロセス数となる