負荷とは?

はじめに

サーバが負荷で落ちた。高負荷状態。負荷テスト。LoadAverageなど。 インフラエンジニアであれば、よく耳にするフレーズだと思います。

ですが、初心に戻ってそもそも負荷とは何者なのか?を整理してみました。

負荷とは?

コンピュータの動作時間を占有するプログラム。 ※これらが想定以上に大きくなる状態を過負荷という。

wikipediaより

過負荷とは?

機械の可動部や電気回路・電子回路などに許容以上の負荷が加わる状態。また、その負荷。

コトバンクより

負荷が高くなる原因

サーバなどを構成する装置は、コンピュータの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を処理待ちにさせず、不眠不休で働かせる事が重要。

次回は、負荷の計測方法について。