2013/10/24

linux vmstat 負荷判断

$vmstat 出力間隔

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0    136  10836   3744 1940256    0    0   174  2050  128   96  1  6 74 19  0
 0  0    136  10456   3720 1940424    0    0     0  6731 6067 7326  0  4 85 11  0
 0  0    136  10028   3700 1940796    0    0     0  6730 6039 7285  0  5 84 11  0

CPU
 sy-->OS自身使う物
 us-->USER使う物
 wa-->IO(ディスク、ネットワーク)アクセスの待ち時間割合
 id-->idle ボケー時間

procs
 r-->実行可能で、実行キューで待つプロセス数
 b-->本来実行可能だが、何らかの理由でブロックされた。IO待ちだ!

r-->実行待ちプロセス。これは??知りたい!!!

==>
CPU数を超える数のプロセスを実行する(Runinig状態にする)事はできないので、CPUの状態(コンテキスト)を保存したり復元したりするコンテキストスイッチを行い、各プロセスを短い時間単位で実行させる。
で、コンテキストスイッチによりRunning状態だったプロセスが一時的にWaitingに追い出されたりすると、実行可能な状態だけども実行できないプロセスとして実行キューに入った状態になる。
次回の割当てで処理されれば影響は無いが、実行キューに入っているプロセスが多かったり優先度が低かったりとすると一定期間待つ状態が発生する。
このようなCPUを使いたくても使えない(言い換えるとCPUの使用時間が長い)状況下では、サーバ利用者に「重い」と感じさせてしまう。
実行キューに入る要因は、CPU割り当て時間のタイムアウトだけで無く、I/O待ちやロック解放待ちなど他にもある


memory
 swpdー>使用しているスワップ領域の量。どんなにメモリが空いていても、ここの数値が一定の量に達していることがあります。
     あまり重要ではない。
 buffー>kernelのbuffer領域。メモリ全体が逼迫してくるとここの領域を使う。
 cache->hardDiskのキャッシュサイズ。

swap
 si->swapから読み込んで、メモリーに展開するデータ量
 so->swap out
 メモリーが困る時、頻繁にSWAPに注文し、SO、SI高くなる。

io
 bi->IOから読んだデータ量
 bo->
 
system
 in->割り込み処理の回数
 cs->コンテクストスイッチの回数。主にプログラムの実行を切り替えること。一定ののロスが生じるね。空回り時間。。

そもそもそのサーバはどんな使い方をしているのか
・NFSサーバといった用途で使用していて、ファイルアクセスが頻繁なら、syが高くなりがちなのは妥当でしょう
・perlとかphpとかのスクリプト言語、C言語で主に純粋な計算量が多いプログラムを利用しているというようなケースなら、usが高くなることは妥当
・cron等でバッチ処理が多く動作するサーバなら、ぶっちゃけprocsの実行キュー待ちプロセス数やブロックされたプロセス数が増加していてもあまり気にする必要性は高くないと判断することもできます
・一方で、Webサーバ等の用途なら、実行キュー待ちのプロセス数が多くなってくると、利用者からは「重い」と目の敵にされるかもしれません。
・swapについては基本的にはsiとsoは0で有り続けることを至上命題にすべきです。