Linux では、サーバの負荷を、ロードアベレージで確認することがあります。ロードアベレージは、CPU の使用率とは別の角度から、システム全体の込み具合を見るための指標です。
この記事では、ロードアベレージの意味と、確認するコマンド、CPU のコア数との比べ方を説明します。最後に、実際に負荷をかけたときの値の変化も確認します。
- ロードアベレージは、CPU を使っている・待っているプロセスと、ディスク I/O などの完了を待っているプロセスの数を、1分・5分・15分で平均した値であること
uptime、top、htopでロードアベレージを確認する方法と、CPU のコア数と比べて読むこと- 負荷をかけると、1分平均が先に上がり、15分平均は少し遅れてついてくること
ロードアベレージの概要
ロードアベレージ(load average)は、一定の時間に、CPU を使っているプロセスと、CPU が空くのを待っているプロセスが、平均して何個あったかを表す値です。Linux では、これに加えて、ディスク I/O などの完了を待って止まっているプロセス(割り込みできないスリープの状態、D)も数えます。そのため、CPU の使用率が低くても、ロードアベレージが高くなることがあります。
ロードアベレージは、1分、5分、15分の3つの数字で表示されます。それぞれ、直近の1分間、5分間、15分間を対象にした平均です。ただし、単純な平均ではなく、新しい値ほど強く反映される指数移動平均で計算されています。
uptime の表示にあるロードアベレージ。左から、1分平均、5分平均、15分平均図の例では、3つの値がすべて 0 に近く、CPU を使っているプロセスも、待っているプロセスもほとんどないことがわかります。
CPU の使用率は、ある瞬間の使われ方を示すので、短い時間で大きく変動します。ロードアベレージは、3つの時間枠を並べて見られるため、負荷が上がってきているのか、下がってきているのかという動きを読み取れます。たとえば、1分平均が 15分平均より大きければ、負荷は上がってきています。
パフォーマンス監視
ロードアベレージは、uptime、top、htop などのコマンドで確認できます。
この記事の画面は、実際の画面ではなく、実行時の画面から見るポイントを抜き出して描いたイメージです。長い出力は途中を省略しています。
uptime
uptime は、現在の時刻、システムの稼働時間、ログインしているユーザ数に加えて、ロードアベレージを表示します。
$ uptime1 12:50:16 up 8:28, 2 users, load average: 0.05, 0.02, 0.00
uptime の実行結果(実際の画面ではなく、表示内容のポイントを示したイメージです)| No. | 表示 | 意味 |
|---|---|---|
| 1 | load average: 0.05, 0.02, 0.00 | 1分平均、5分平均、15分平均のロードアベレージ。この例では、3つとも 0 に近い |
そのほかの項目は、左から順に、現在の時刻、稼働時間(up 8:28 は、8時間28分)、ログインしているユーザ数です。
top
top は、実行中のプロセスの情報を、リアルタイムで表示するコマンドです。画面の最初の行に、ロードアベレージが表示されます。その下には、プロセスの数、CPU の使用率、メモリの使用量などが表示されます。
1top - 12:54:42 up 8:33, 2 users, load average: 0.15, 0.03, 0.01Tasks: 171 total, 1 running, 170 sleeping, 0 stopped, …%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, …MiB Mem : 1974.4 total, 520.5 free, 250.6 used, …MiB Swap: 2048.0 total, 2046.2 free, 1.8 used. …
top の画面の上部(実際の画面ではなく、表示内容のポイントを示したイメージです。長い行は途中を省略しています)| No. | 表示 | 意味 |
|---|---|---|
| 1 | load average: 0.15, 0.03, 0.01 | 1行目の右側に表示される、1分平均、5分平均、15分平均のロードアベレージ |
htop
htop は、top を使いやすくしたコマンドで、プロセスとリソースの使用状況を、対話的に表示します。CPU ごとの使用率が棒グラフで表示されるので、どの CPU が使われているのかを、ひと目で確認できます。
htop は、別途インストールが必要です。Ubuntu では、次のコマンドを実行します。
sudo apt install htop
インストール後に htop と入力すると、画面が起動します。画面の右上に、ロードアベレージが表示されます。
0[| 0.5%] 1[ 0.0%] 2[ 0.0%] 3[ 0.0%] 4[ 0.0%] 5[ 0.0%] 6[ 0.0%] 7[ 0.0%]Mem[||||||||||||236M/1.93G]Swp[| 1.76M/2.00G]Tasks: 38, 39 thr; 1 running1Load average: 0.00 0.02 0.00Uptime: 08:41:06
htop の画面の上部。何も実行していない状態(実際の画面ではなく、表示内容のポイントを示したイメージです)| No. | 表示 | 意味 |
|---|---|---|
| 1 | Load average: 0.00 0.02 0.00 | 1分平均、5分平均、15分平均のロードアベレージ。htop では、スペース区切りで表示される |
uptime、top、htop は、いずれも /proc/loadavg を参照して、ロードアベレージを表示しています。/proc/loadavg の最初の3つの数字が、1分、5分、15分の平均です。
ロードアベレージの値について
ロードアベレージ値の考え方
ロードアベレージは、CPU の数(コア数)と合わせて見ます。ロードアベレージは、CPU の数で割った値ではなく、プロセスの数そのものの平均だからです。たとえば、コアが4つのサーバでロードアベレージが 4 なら、すべてのコアがふさがっている状態です。同じ 4 でも、コアが1つのサーバなら、3つ分のプロセスが順番を待っている状態になります。
レストランの例で考えます。レストランに、料理を作れるキッチン(CPU のコア)が1つだけあるとします。キッチンは、一度に1つの料理(プロセスの処理)しか作れません。ロードアベレージは、このキッチンの忙しさを表します。
| ロードアベレージ | キッチンが1つの場合 |
|---|---|
| 0 | キッチンは空いていて、注文はすぐに処理できる |
| 1 | キッチンは常にふさがっているが、注文は待たされない |
| 1より大きい | 注文が待たされる。大きいほど、待っている注文が多い |
キッチンが増える(コア数が増える)と、同時に処理できる注文も増えます。キッチンが2つなら、ロードアベレージが 2 になるまでは、注文が待たされません。
CPU のコア数は、htop の画面の左側にある CPU の数で確認できます。この環境では、0 から 7 までの8つの CPU が表示されていて、コア数は 8 です。
1 0[ 0.0%] 1[ 0.0%] 2[ 0.0%] 3[ 0.0%] 4[ 0.0%] 5[ 0.0%] 6[ 0.0%] 7[ 0.0%]Mem[||||||||||||242M/1.93G]Swp[| 1.76M/2.00G]Tasks: 38, 38 thr; 1 running2Load average: 0.01 0.02 0.00Uptime: 09:26:07
htop でコア数を確認する(実際の画面ではなく、表示内容のポイントを示したイメージです)| No. | 表示 | 意味 |
|---|---|---|
| 1 | 0 から 7 の CPU | CPU が8つ表示されている。コア数は 8 |
| 2 | Load average: 0.01 0.02 0.00 | ロードアベレージ。コア数 8 に対して、ほとんど使われていない |
次のコマンドでも、CPU のコア数を確認できます。
hirotano@ubuntu-1:~$ grep cpu.cores /proc/cpuinfo | sort -u
cpu cores : 8
/proc/cpuinfo の cpu cores は、CPU(物理パッケージ)1つあたりのコア数です。CPU が複数ある場合や、ハイパースレッディングが有効な場合は、OS が見ている論理 CPU の数と一致しないことがあります。ロードアベレージと比べるときは、nproc コマンドの結果(利用できる論理 CPU の数)を使うと確実です。
ロードアベレージ値の確認(負荷テスト)
実際に負荷をかけて、ロードアベレージの変化を確認します。ここでは、8つのコアのうち1つの CPU に、stress コマンドで負荷をかけます。stress コマンドは、-c オプションで、CPU に負荷をかけるプロセスの数を指定できます。
次の画面は、負荷をかけ続けたあとの htop です。1分平均は 1.01、5分平均は 0.99 で、1つの CPU がふさがっていることがわかります。15分平均の 0.70 は、まだ上がっている途中です。
0[ 0.0%] 1[ 0.0%]1 2[||||||||||||||100.0%] 3[ 0.0%] 4[ 0.0%] 5[ 0.0%] 6[ 0.0%] 7[ 0.0%]Mem[||||||||||||244M/1.93G]Swp[| 1.76M/2.00G]Tasks: 40, 38 thr; 2 running2Load average: 1.01 0.99 0.70Uptime: 09:46:28
htop(実際の画面ではなく、表示内容のポイントを示したイメージです)| No. | 表示 | 意味 |
|---|---|---|
| 1 | 2番の CPU が 100.0% | 1つの CPU に負荷がかかっている |
| 2 | Load average: 1.01 0.99 0.70 | 1つの CPU がふさがっているので、1分平均と5分平均は 1 に近い。15分平均は、まだ 1 に向かって上がっている途中 |
2つの CPU に負荷をかけると、ロードアベレージは 2 に近づいていきます。次の画面は、負荷をかけ続けたあとの htop です。
0[ 0.0%] 1[ 0.0%] 2[ 0.0%]1 3[||||||||||||||100.0%] 4[ 0.0%] 5[ 0.0%] 6[ 0.0%] 7[||||||||||||||100.0%]Mem[||||||||||||246M/1.93G]Swp[| 1.76M/2.00G]Tasks: 41, 38 thr; 3 running2Load average: 2.02 1.92 1.43Uptime: 10:00:41
htop(実際の画面ではなく、表示内容のポイントを示したイメージです)| No. | 表示 | 意味 |
|---|---|---|
| 1 | 3番と7番の CPU が 100.0% | 2つの CPU に負荷がかかっている |
| 2 | Load average: 2.02 1.92 1.43 | 2つの CPU がふさがっているので、1分平均は 2 を超え、5分平均も 2 に近い。15分平均は、まだ上がっている途中 |
1分・5分・15分の値の動き方
負荷をかけ始めても、3つの値が同時に 1 や 2 になるわけではありません。1分平均が最初に上がり、5分平均、15分平均の順に、時間をかけて追いついてきます。上の2つの画面でも、15分平均だけが、1や2に届いていません。
たとえば、ロードが 0 の状態から、ロードアベレージが 1 になる負荷をかけ続けた場合の値は、計算上、次のように変化します。
| 負荷をかけてからの時間 | 1分平均 | 5分平均 | 15分平均 |
|---|---|---|---|
| 10分 | 1.00 | 0.86 | 0.49 |
| 20分 | 1.00 | 0.98 | 0.74 |
このため、15分平均が 0.70 まで上がっている1つ目の画面は、負荷をかけ始めてから、15分以上たった時点の画面だと考えられます。逆に、負荷が収まったあとも、15分平均はゆっくり下がるので、少し前まで負荷が高かったことが読み取れます。
ロードアベレージが高くなる原因
ロードアベレージが高い原因は、CPU の使用率が高いことだけではありません。ディスク I/O の遅延や、メモリ不足によるスワップの発生などで、I/O の完了を待つプロセスが増えても、ロードアベレージは高くなります。
ロードアベレージがコア数を超えたときは、パフォーマンスに問題が起きているかもしれません。ただし、それだけで原因は決まらないので、top や htop で、CPU の使用率、I/O 待ち(top の wa)、プロセスの状態(S の列で、R は実行中・実行待ち、D は I/O などの完了待ち)を確認して、原因を切り分けます。
まとめ
ロードアベレージは、CPU を使っている・待っているプロセスと、I/O の完了を待っているプロセスの数を、1分・5分・15分で平均した値です。CPU のコア数と比べて、負荷の大きさと動きを確認します。
| 確認すること | 見方 |
|---|---|
| 3つの値 | 1分、5分、15分の順に並ぶ。1分平均が15分平均より大きければ、負荷は上がってきている |
| コア数との比較 | コア数以下なら、CPU には余裕がある。コア数を超えたら、待っているプロセスがいるので、原因を確認する |
| 確認するコマンド | uptime、top、htop でロードアベレージを確認する。htop は CPU ごとの使用率も見られる |
| 高いときの原因 | CPU の使用率だけでなく、ディスク I/O の遅延やスワップでも高くなる |
コメント