LoginSignup
14
16

More than 3 years have passed since last update.

LoadAverage(ロードアベレージ)とは一体何者?

Posted at

はじめに

運用保守の業務に携わっていて、CPU、Memory、Diskのリソース監視の項目の並びにLoadAverageなるものが存在します。『サーバー負荷の状況を判断する項目』くらいの浅い認識しか持っていなかったので、これの正体について調べてみました。

LoadAverageとは?

LoadAverageとは、『1CPUに対して、平均的にどれだけプロセスが実行待ちになっているか』を示す指標で、この数値が高いとLinuxのシステムが高負荷の状況であることを意味します。
そして、Linuxプロセスの状態について、以下の表が示すように複数の状態が存在します。この中で、LoadAverageの数値に影響するのが、TASK_RUNNINGTASK_UNINTERRUPTIBLEとなります。この2つのプロセス数が多いと、色んなプロセスがCPUに対して処理を求めているけど、サーバが捌き切れないため、そのプロセスが後ろに待ち行列を作っている状態を意味しています。そのため、LoadAverageの数値が高いほど、そのサーバの負荷は高い状態ということになります。

プロセス 状態
TASK_RUNNING CPU上で実行中、あるいは実行可能で CPUの割り当てを待っている状態
TASK_INTERRUPTIBLE 割り込みが可能だけど、ユーザの入力待ちなどで、いつ復帰するかわからない状態
TASK_UNINTERRUPTIBLE サーバの負荷が高く、ディスクI/Oなどで割り込み不可の待ち状態
TASK_STOPPED プロセス停止状態
TASK_ZOMBIE ゾンビ化状態。いわゆるゾンビプロセス

LoadAverageを炙り出すには?

LoadAverageの正体がわかったので、次は実際にこの数値を炙り出します。

  • uptimeコマンド
[hoge@test ~]$ uptime
 16:06:08 up 248 days,  5:56,  1 user,  load average: 0.54, 0.57, 0.35
[hoge@test ~]$
  • topコマンド
[hoge@test ~]$ top
top - 16:05:35 up 248 days,  5:55,  1 user,  load average: 0.47, 0.57, 0.34
Tasks: 135 total,   1 running, 105 sleeping,   0 stopped,   0 zombie
Cpu(s):  4.8%us,  0.7%sy,  0.0%ni, 94.3%id,  0.2%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   7953580k total,  6483128k used,  1470452k free,   215532k buffers
Swap:  7953576k total,    28672k used,  7924904k free,  1781460k cached
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
17164 jetty     20   0 5913m 2.4g  19m S  7.3 31.4   9:23.61 java
 3827 rundeck   20   0 3802m 1.3g  17m S  3.3 17.7 168:27.61 java
 2382 root      20   0  574m  59m 3860 S  0.3  0.8  34:22.45 ruby
    1 root      20   0 19692 1668 1408 S  0.0  0.0   0:04.29 init
[hoge@test ~]$ top

他にも確認方法ありますが、代表的な2つのコマンドで試しました。実行結果の以下部分がLoadAverageの数値となります。

load average: 0.54, 0.57, 0.35

数値が3つ並んでおり、左から順に、1分前の数値(0.54)5分前の数値(0.57)15分前の数値(0.35)
となります。

LoadAverageの正常値は?

先ほど、LoadAverageの数値を確認しましたが、正常値かどうかの判断はCPUのコア数で判断します。かつてシングルコアが主流の時代は、LoadAverageは1以下であれば無条件で正常値と判断されていたようですが、現在はマルチコアも存在するため、コア数によって正常値が異なる点は注意が必要です。
そのため、コア数が1つであれば、正常値は1以下になり、コア数が2つであれば、正常値は2以下になります。では、先程のサーバーのコア数を確認してみましょう。

  • コア数確認のコマンド
[hoge@test ~]$ grep cpu.cores /proc/cpuinfo | sort -u
cpu cores   : 1
[hoge@test ~]$

このサーバーはコア数1と分かりましたので、正常値は1以下となり、今回炙り出したLoadAverageは正常値と判断されます。

最後に

今回、Linuxのシステム限定の話でしたが、Windowsの場合はLoadAverageを確認できるコマンドやツールがないらしく、CPUやMemoryの使用率から判断したり、タスクマネージャから負荷状況を確認するそうです。私の浅いリサーチによる情報ですので、もし認識違ってましたら、ご指摘いただけますと幸いです。

参考

「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
マルチコア時代のロードアベレージの見方
ロードアベレージでサーバの負荷を確認する
【CPUの基本】図解でよくわかる「マルチコア / スレッド」の意味

14
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
16