注目キーワード
  1. 技術
  2. 広告
  3. IDFA
  4. PHP
  5. WordPress

LinuxでLoad Averageを確認するときは、topかuptimeを使おう

Load Averageとは

ロードアベレージとは、システム全体の負荷状況を表す指標になっています。1CPUにおける単位時間あたりの実行待ちとディスクI/O待ちのプロセスの数で算出されると言われています。(CPUの実行権限が与えられているのを待っているタスクとディスクI/Oが完了するのを待っているタスクが該当します。)
高ければ高いほどサーバの負荷が高く、低ければ低いほど負荷が低い状態です。数値は整数で表示されますので、0.00以上になります。仮に、1サーバあたりのスループットをあげたい場合、ロードアベレージを下げられるようにできると、パフォーマンスが向上できます。

ロードアベレージの基準

では、どのくらいのロードアベレージであれば良いかを考えたいと思います。ロードアベレージが問題ないかを考える基準として、CPUが1コアの場合、1未満であれば、問題ないとされています。つまり、8コアであれば、8未満であれば、問題ないです。

CPUのコア数は、下記のコマンドで見ることができます。

$ grep cpu.cores /proc/cpuinfo | sort -u
cpu cores   : 1

調べ方

  • uptimeコマンド
$ uptime
# 12:00:00 up  1:09,  1 users,  load average: 1.10, 2.34, 0.31

uptimeを実行すると、現在の時間、システムの稼働時間、ログインユーザ数、ロードアベレージを見ることができます。ロードアベレージは、3つ並んでいますが、左から、直近1分、5分、15分の平均値を表示しています。

見方としては、直近1分が高く、それ以外が低ければ、1分以内に負荷が起きたことがわかり、全ての数値が高ければ、ずっと負荷の起きている状態だということがわかります。

  • wコマンド
$ w
 12:00:00 up 211 days, 57 min,  1 users,  load average: 0.09, 0.04, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1                      26 1月20 210days  0.64s  0.64s w

wを実行すると、ロードアベレージと、サーバに誰がログインしていて、何を実行しているのかを把握することができます。

  • topコマンド
top - 12:00:00 up 211 days, 58 min,  1 users,  load average: 0.02, 0.03, 0.05
Tasks: 116 total,   2 running, 114 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.2 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.1 st
KiB Mem :  2046896 total,    85364 free,   178900 used,  1782632 buff/cache
KiB Swap:  4194300 total,  4107552 free,    86748 used.  1569176 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
30670 root      20   0  396248  22756  12840 S   1.3  1.1   0:00.55 php

topを実行すると、ロードアベレージと、CPU使用率、メモリなどサーバ内の統計情報を表示してくれます。

ロードアベレージが高かった場合

ロードアベレージが高いということは、実行待ちのタスクが多い=タスクの処理が進んでいないという意味だと考えてください。何が原因かを調べるためには、もう少し調査をしなくてはいけません。

CPUの実行権限が与えられているのを待っているタスクとディスクI/Oが完了するのを待っているタスクが該当しますので、CPU、I/Oどちらが原因かを確認する必要があります。CPUがボトルネックの場合は、リクエストされるタスクに対し、CPUの計算処理が追いついていない状態です。CPUが高い状態だと、現環境だと処理が追いついていないため、対策を行ないましょう。I/Oがボトルネックの場合は、リクエストされるタスクに対し、ディスクとの入出力が追いついていない状態です。データベースなどではこの問題が起きやすいのですが、まずは、どちらが問題になっているか、確認するようにしましょう。

調べ方については、先ほど記載したtopコマンドを使っていきます。

top - 12:00:00 up 211 days, 58 min,  1 users,  load average: 0.02, 0.03, 0.05
Tasks: 116 total,   2 running, 114 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.2 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.1 st
KiB Mem :  2046896 total,    85364 free,   178900 used,  1782632 buff/cache
KiB Swap:  4194300 total,  4107552 free,    86748 used.  1569176 avail Mem

 PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
30670 root      20   0  396248  22756  12840 S   1.3  1.1   0:00.55 php

上記のように調べると、CPUの使用率がわかります。1コアあたりのCPU使用率が平均して、80%以上であれば、CPUがボトルネックで負荷が高い可能性が高いです。
負荷の高いプロセスを特定するには、pidstatコマンドが有効です。

$ pidstat

I/Oについては、下記のコマンドで確認ができます。

$ sar 5 10
CPU     %user     %nice   %system   %iowait    %steal     %idle
all      1.21      0.00      0.67      0.00      0.07     98.05

ここに記載されるiowaitの値が高くなっていた場合は、I/Oがボトルネックの可能性が高いです。40%以上になっていたら、I/Oを疑ってみてください。このようなことから、ロードアベレージが高く、CPUの使用率が低い状態で、iowaitが高ければ、I/Oが原因であると言えるでしょう。

まとめ

ロードアベレージを見るには、w、top、uptimeを使うことがわかりました。サーバ負荷が高い状況時に、詳細を確認するために実行することが多々あるかと思います。コマンドを実行するときは、top以外のwコマンドか、uptimeコマンドを使うことをお勧めします。理由としては、topコマンドは、ロードアベレージ以外の統計情報の取得を行なうため、やや処理が重たいです。そのため、負荷の高い状況下で実行すると、コマンドが返ってこない、逆に負荷になることが考えられます。なので、負荷の高い時は、wかuptimeを使うのが良いでしょう。