load averageを見てシステムの負荷を確認する

  • 283
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

load averageとは

ロードアベレージはシステム全体の負荷状況を表す指標。
「1CPUにおける単位時間あたりの実行待ちとディスクI/O待ちのプロセスの数」で表される。

システムのスループットを上げたい場合はロードアベレージを下げることを目標にする。

詳細な説明

Linuxカーネルはプロセス1つごとにプロセスディスクリプタを持っていて、そのstateメンバにプロセスの状態を入れて管理している。
プロセスの状態は以下のように区別される。

  • TASK_RUNNING: 実行可能な状態。CPUが空いていれば実行できる。
  • TASK_UNINTERRUPTABLE: 割り込み不能な待ち状態。ディスクI/O待ちなど、短時間で復帰するもの。
  • TASK_INTERRUPTABLE: 割り込み可能な待ち状態。ユーザの入力待ちなど、復帰時間が予測できないもの。
  • TASK_STOPPED: 実行中断になった状態。リジュームされるまでスケジューリングされない。
  • TASK_ZOMBIE: ゾンビプロセス。子プロセスがexitして親プロセスにwaitされていないもの。

run queueに入っているプロセスのうち、TASK_RUNNINGTASK_UNINTERRUPTABLEのものがload averageとして換算される。

load average、つまりシステムの負荷とは、「CPUの実行権限が与えられるのを待っているプロセス」「ディスクI/Oの完了を待っているプロセス」の多さのことである。

load averageを見れるコマンド

uptime

$ uptime
# 11:52:38 up  3:12,  2 users,  load average: 2.90, 0.64, 0.25

システムの稼働時間を見るコマンド。
それ以外に、現在の時間と、ログインユーザの数と、load averageが見れる。

load averageは、左から、直近1分, 5分, 15分間で計測したものを表している。
watch uptimeのようにすれば変化を監視できるが、その場合は後述のtopを使っても良い。

w

$ w
# 11:58:45 up  3:18,  2 user,  load average: 0.06, 1.19, 0.87
# USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
# isucon   pts/0    i100-100-80-200. 11:59    6.00s  0.00s  0.00s top
# isucon   pts/1    i100-100-80-200. 08:42    5.00s  0.02s  0.00s w

システムに誰がログインしていて何をしているかを表すコマンド。
1行目はuptimeと同じものが表示される。

top

$ top
# top - 12:05:42 up  3:25,  2 users,  load average: 1.12, 2.24, 1.47
# Tasks:  92 total,   1 running,  91 sleeping,   0 stopped,   0 zombie
# Cpu(s):  2.3%us,  0.3%sy,  0.0%ni, 97.2%id,  0.1%wa,  0.0%hi,  0.0%si,  0.1%st
# Mem:  15144564k total,  1326668k used, 13817896k free,    41508k buffers
# Swap:        0k total,        0k used,        0k free,   502256k cached

システムの様々な統計を同時に表示し変化を監視することができるコマンド。
万能だが、solarisなどのOSでは入ってないことがあるので上記のようなコマンドを使う必要がある。

機能が多いので、詳しい使い方はtopコマンドの使い方に書いた。

まとめ

uptime, w, topなどを使うとシステムの負荷状況を表すload averageを見ることができる。