サーバの負荷などを調査する際に参考にするロードアベレージとCPU利用率ですが、それらの違いについて理解していない人が身近にいましたので、もし同じような方がいたらと思い、簡単に解説してみたいと思います。
それぞれの違い
CPU使用率は文字通りCPUだけの使用率
CPU使用率はCPUを利用している割合です。CPUが処理をしている間はこの使用率が上がることになります。
使用率は計測する時間のうちで平均をとって計算することになるので、100%の状態が長時間続いているときは注意が必要です。
うまく設計してCPUを100%に近い状態で使っている、という状況も無くはないと思いますが、多くの場合でCPUが100%近くで張り付いているときは、例えばWEBサーバの場合、WEBへのアクセスが遅い、またはアクセスできずタイムアウトになるなどが発生します。
CPUを利用しているプロセスを特定して、そのプロセスのロジックを見直すとか、ミドルウェアなどだったら関連する不具合がないか確認してバージョンアップするなどして対応します。
ロードアベレージはCPUだけではない
よくある考え方として
ロードアベレージの値がCPUの数より低ければ問題ない
という考え方があります。
CPUが2つのサーバの場合、ロードアベレージが2より下、CPUが4つなら4より下であれば問題ないと考えてよい、といった考え方です。
基準として問題ないとは思いますが、この考え方が誤解を招いているのかな、とも思いました。
(あくまで私見です。。)
ロードアベレージが高い場合の対応
ロードアベレージが高くCPU利用率が高い場合は前述のCPU使用率が高い場合の対応でまずは良いと思います。
では、ロードアベレージが高くCPU利用率が低い場合はどうでしょうか。
この場合はCPUが問題ではないことになります。
では何が問題なのか。
それはI/Oや!
そうなんです。
ロードアベレージはCPU使用率に加え、I/Oの使用も含んでいます。
そのため、CPU使用率に問題がない場合は、I/Oを確認する必要があります。
例えばメモリ不足でswapを使っていないかどうかを見たり、ファイル書き込みやDB書き込みなどが多いために、ファイルI/Oが多い場合などはこのパターンになります。
原因は当然探って対策を打つ必要があるのはもちろんですが、経費や状況を一切考えずに言うと、単にメモリを増やしたり、HDDをSSDに変えるなどでロードアベレージが下がる場合もあります。
サーバの負荷はロードアベレージもCPU使用率も大切
結局のところどちらもサーバの負荷を確認するうえでは大事な要素の1つです。
今回確認のコマンドなどは省きましたが、Linuxであれば、sar,top,vmstatなどのコマンドで原因追及してつぶしていく必要があります。
テスト中のサーバであればどのプロセスが悪さをしているのかをしっかり追及、本番サーバなどの場合はサーバが止まる前に、監視などで警告が来た時点でしっかりと確認しましょう!
しっかり原因追及してトラブルを防ぐんやで~