Blog ブログ
ロードアベレージってなに?
皆様お久しぶりです。
シニアプログラマの小田です。
(facebookをやってますので技術交流しましょう!!)
負荷についての1回目からの続きをやりたいと思います。
1回目を見ていない人はこちらから。
今回は負荷として「ロードアベレージ」について書きます。
さて、みなさんはロードアベレージについて、どこまで知ってますか?
・実行プロセス数
・CPUの個数分を超えなければOK
・これが高いと処理が遅くなる
ぱっと思いつくのはこれぐらいでしょうか。
ではもっと掘り下げていきましょう。
こんな時に頼りになるのは、ウィキペディアこと百科事典ですね。
さっそく調べてみました。
これを読みますと、
「システムがどれだけのワークロードを持っているかを知る事は出来るが、
個々のワークロードの軽重を示す指標にはならない」
生徒:「先生!何のことなのかさっぱりです!」
先生:「大丈夫、私もわかりません!w」
って会話が聞こえてきそうですね。
さて、それでは結局どういうものなのかを見て行きましょう。
ロードアベレージは、実行待ちのプロセスがどれだけあるか?を示しています。
つまり、これが高い数値であればあるほど、待たされているプロセスが多いということで、処理の待ち時間が長くなっていきます。
ソーシャルゲームで置き換えると、APIを呼び出してレスポンスを返してくれないと、サーバ側のデータを、ゲーム内で表示させることすらできなくなります。つまり、「自分のアカウントにログインするぞ」といっても、実行待ちのプロセスとして並ばされると、ログイン結果が全く帰ってこないわけです。
これはストレスになりますよね。
僕なんか、Now Loadingが出るだけでイラッとします(ほぼ職業病と思ってますw)
では、そんなロードアベレージが、どういう値になっていたら正常として判断していいのか?
近年CPUのコア数がわけわからない数値になっているため、「CPUの数 = ロードアベレージの基準値」という図式は当てはまりません。
というのも、これはCPUのタスクスケジューラーの問題で高いのか、それとも正当に各CPUごとに1タスクずつ待たされているのか?など理由がわからないためです。
先ほどの百科事典にあったとおり、
「システムがどれだけのワークロードを持っているかを知る事は出来るが、
個々のワークロードの軽重を示す指標にはならない」
というのは、まさにこのことですね。
もちろん、待たされる数が高くないに越したことはないのですが、
リンクにもある通り、負荷状況をみるために、CPU使用率を参考にするようになってきています。
また待ち行列を解消するには単純な話ですが、プロセスを処理する回転率を上げればいいのです。(急にお店スタッフのような言い方になってすみません)
そうです単にそれだけなのです。ということは、やはり普段から、
- 無駄なループを回していないか?
- 複数のデータを1回で取得出来るのではないか?
- SQLに対してインデックスはきいているか?
といった無駄な処理を無くすというのが、やはりいちばん懸命なのです。
当たり前のことですが、これを読んで頂いたあなた自身、胸に手を当てて考えて頂ければ幸いです。
はい!ということで次お会いするときは、CPU使用率について語りたいと思います!!
以上、「ロードアベレージってなに?」についてでした。
また次回お会いしましょう。