ロードアベレージが高い時の調査するポイントをまとめました。
とある日、サーバー運用保守の担当者からいきなり質問が飛んできた。
担当者「はぁ~、サーバのCPU交換てしたことある?まずいかも、交換必要かも。。」
私「(あの一応私プログラマーですけど・・)」
私「いや、メモリやHDDならありますけど、CPUは経験ないです。」
私「CPU交換て大変じゃないですか?マザーボードやBIOS設定も絡んできそうですし。」
担当者「だよねー、はぁ~どうしよう。。」
私「CPU壊れたんですか?メーカー修理やサポートに投げたほうが・・」
担当者「いや、サーバが重くて調べたらロードアベレージが高いんだよ。」
私「CPU使用率が高いんですか?処理見直すとか、バッチの時間を分けるとか。」
担当者「いや、CPU使用率は低いけど、コア数が足りないんだよCPUの限界だよ。」
私「・・・ボトルネックをちゃんと調べたほうが良いですよ。。」
担当者「処理待ちが発生しているから、コア数増やせばいいのでは??」
私「(あかん、やっぱりインフラって人材不足なんだな・・)」
ロードアベレージとは
ざっくり言うと処理実行を待っているプロセスの数。複数タスクによるサーバリソース(CPU、メモリ、I/Oなど)の奪い合いで発生する。
ロードアベレージが高くなる原因
大体、ボトルネックは次の3つが上げられる。
- CPU負荷
- メモリ
- ディスクI/O
ボトルネックをちゃんと調べて対応しないと意味がありません。
CPU使用率が原因
CPU使用率が100%に近い場合はCPUがボトルネックになっている。
処理を見直すとか、バッチ実行時間を分けるとか、CPUの性能を上げるとか対応が必要。
確かにCPUが原因なら、コア数が増えれば一度に実行できる処理数が増えるのでロードアベレージを下げることはできるかもしれない。
メモリが原因
スワップが発生している場合はメモリがボトルネックになっている可能性がある。
メモリを大量に消費する処理を見直すとか、メモリを増設するなどの対応が必要
ディスクI/Oが原因
HDDには読み書き性能の限界がある。rpm(回転数)多いほうがI/O能力が高い。
CPU使用率が高くないのにiowaitが高い場合はI/Oがボトルネックになっている可能性がある。
よりrpm(回転数)が高いHDDに交換するか、いっそSSDにしてみる。
原因を調査してから対策
CPUの性能を上げても他がボトルネックなら効果はあまり得られない。調査をしてから対策することをおすすめします。
今回の原因。。
冒頭で話したサーバ運用保守担当者の話ですが、調査の結果iowaitが高くI/Oが原因でした。
担当者「いや~、HDDの回転数上げたら改善されたよ。」
私「HDD交換のほうがコスト安いので良かったですね。作業も簡単ですし。」
担当者「また何かあったら頼むよ!」
私「・・はい(だから、私プログラマーですから。。)」