負荷とは?
はじめに
サーバが負荷で落ちた。高負荷状態。負荷テスト。LoadAverageなど。 インフラエンジニアであれば、よく耳にするフレーズだと思います。
ですが、初心に戻ってそもそも負荷とは何者なのか?を整理してみました。
負荷とは?
コンピュータの動作時間を占有するプログラム。 ※これらが想定以上に大きくなる状態を過負荷という。
過負荷とは?
機械の可動部や電気回路・電子回路などに許容以上の負荷が加わる状態。また、その負荷。
コトバンクより
負荷が高くなる原因
サーバなどを構成する装置は、コンピュータの5大装置(「入力装置」「制御装置」「演算装置」「記憶装置」「出力装置」)と呼ばれている。 このうちの「制御装置」と「演算装置」の2つの役割を担っているCPUが、コンピュータの動作時間(CPU時間)を管理しているため実質的にこのCPUへの負荷を上げる要因はすべて高負荷の原因になり得る。
せっかくなので、それぞれの装置事に例を考えてみた。
入力/出力装置
装置としては、キーボードやマウスなどが該当するが、この入力装置が過負荷状態になる事はごくごく稀だろう。 サーバなどで発生するのは、NIC(Network Interface Card)を原因とする過負荷だと思う。
サーバへの接続はほとんどのケースでNICを経由する事になるが、 例えば、100GBの大量のデータをアップロードするケースで考えてみるとどうなるだろうか。
アップロードが完了するまでは、逐一データ送られてくるためそれを処理するためには、CPUで制御しなければならない。 仮に、大量のデータを受付するWebサーバが存在した場合、アップロード数分だけ複数のプロセスで処理する事になる。 つまり、それだけCPUの動作時間が奪われるため高負荷状態になるのである。
※php.ini でアップロードサイズを限定する意味がよく分かると思う。
制御装置、演算装置
当たり前だが、CPUも性能に限界があるため、処理性能を超える要求に対しては過負荷が発生する。
限られている性能をフルに使うためには、OSやミドルウェアのチューニングで最適化する必要がある。 サービスイン前の負荷テストが極めて重要という事。
記憶装置
装置としては、メモリやHDDが該当する。 CPUの動作時間は非常に高速です。そんなCPUからすると、メモリやHDDへのアクセスは遅いなんてもんではありません。 特にHDDへの書き込みでCPUを待たせる事は、悪です。
HDDへの書き込みが完了するまで、CPUは「HDDへの書き込みが終わる」という事を待たなければならず、 他の処理に動作時間を割り当てることが出来ません。
よくあるケースとしては、メモリ不足によるスパップアウトなどである。 俗に「スラッシング」と呼ばれる事象の事である。
まとめ
CPUを処理待ちにさせず、不眠不休で働かせる事が重要。
次回は、負荷の計測方法について。