前回
サーバ/インフラを支える技術4 Linux単一ホストの負荷を見極める 1 ボトルネックを見極める - by shigemk2
前述のように負荷は
- CPU負荷
- I/O負荷
の2種類に分類できる。
計算速度はCPUの処理速度に依存し、
データの検索などはI/Oに負荷をかける。
APサーバはDBから取得したデータを加工(計算)するので、
CPUバウンドなサーバであり、
DBサーバはデータをディスクから検索するので、
I/Oバウンドなサーバと呼ばれる。
基本的に最近の殆どのOSはマルチタスクであり、
つまり短い時間間隔で複数のタスクを切り替えながら
処理を進めることでマルチタスクを実現している。
ただ複数のタスクを処理しないといけないため、
当然「処理待ち」のタスクも存在する
この処理待ちのタスクの数を1分間、5分間、15分間の間で
報告されているのがロードアベレージで、
このロードアベレージを表示するのがtopというコマンドである。
ただし、待ちタスクの数だけを表示するので、
ロードアベレージが高い原因がCPU負荷によるものなのか
I/O負荷によるものなのかは判断できない。
また、プロセスは「プログラムの命令」「実行時に必要な情報」が
まとめられたオブジェクトのことである。
これを調整するのがプロセススケジューラであり、
CPUやI/Oの状態を確認する。
このプロセスには状態遷移が存在し、
「実行待ち」(CPUの実行権限待ち)
「実行中」
「割り込み可能な待ち状態」
「割り込み不可能な待ち状態」(I/O処理の完了待ち)
に大別される。
各プロセスには優先順位が存在し、マシンは各プロセスを見て
優先順位をもとにプロセスにCPUを割り当てたり実行したりする。
ロードアベレージは「実行したいけど待たなければならない処理」を指し、
割り込み可能な処理は例えばキーボードの入力待ちだとかデータの着信
待ちだとか相手からいつデータがやってくるか分からない「割り込み可能な
待ち状態」はロードアベレージには含まれない。
psにSTAT項があり、
R(Run) 実行中待ち
S(Sleep) 「割り込み可能な待ち状態」
D(Disk Sleep) 「割り込み不可能な待ち状態」
Z(Zombie)
ロードアベレージ計算の関数はkernel/timer.cのcalc_load()であるので、
それを見ましょう。
また、CPU使用率やI/O待ちの割合を知るためにはsarを使う
%userはCPUのユーザモードでの使用率で、%systemはシステムモードである。
また、%iowaitはI/O待ち率を示している。
topでロードアベレージが高く、またsarでCPUの使用率が高いなら、
CPUリソースが不足していると考えられ、I/O待ち率が高いなら
I/Oが負荷の原因であると考えられる。
次回
サーバ/インフラを支える技術4 Linux単一ホストの負荷を見極める 3 負荷の軽減について - by shigemk2
[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)
- 作者: 安井真伸,横川和哉,ひろせまさあき,伊藤直也,田中慎司,勝見祐己
- 出版社/メーカー: 技術評論社
- 発売日: 2008/08/07
- メディア: 単行本(ソフトカバー)
- 購入: 133人 クリック: 2,270回
- この商品を含むブログ (284件) を見る