by shigemk2

当面は技術的なことしか書かない

サーバ/インフラを支える技術4 Linux単一ホストの負荷を見極める 2 負荷とは何か

前回
サーバ/インフラを支える技術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シリーズ)

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)