Linuxシステムにおける「平均負荷(Load Average)」の理解と分析手法

uptimeコマンドによる負荷確認

Linuxシステムのレスポンスが悪化した際、まず実行するのがtopuptimeコマンドです。これらにより、システムの現在の負荷状況を迅速に把握できます。

$ uptime
 14:20:05 up 12 days,  3:15,  2 users,  load average: 1.15, 0.85, 0.50

出力結果の末尾にある「load average」の3つの数値は、それぞれ過去1分間、5分間、15分間の平均負荷を示しています。これらの推移を見ることで、負荷の傾向を判断できます。

  • 上昇傾向:1分間の数値が15分間の数値より大きい場合、負荷が増加しています。
  • 下降傾向:1分間の数値が15分間の数値より小さい場合、負荷はピークを過ぎて減少しています。
  • 安定:3つの数値に大きな差がない場合、負荷は一定の状態で推移しています。

平均負荷の正体

平均負荷を「CPU使用率」と同じものだと誤解されることがありますが、厳密には異なります。平均負荷とは、単位時間あたりに実行可能状態(Running)または割り込み不可のスリープ状態(Uninterruptible Sleep)にあるプロセスの平均数、すなわち「アクティブなプロセス数」を指します。

  • 実行可能状態:CPUを使用中、または実行権限が回ってくるのを待っている状態(psコマンドでRと表示)。
  • 割り込み不可状態:主にディスクI/Oなどのハードウェア応答を待っている状態(psコマンドでDと表示)。システムの重要な処理中であり、途中で中断できません。

つまり、平均負荷は「処理を待っているタスクがどれだけ溜まっているか」という行列の長さを示していると言えます。

負荷の適正値を見極める

平均負荷の数値を評価するには、システムの論理CPU数を知る必要があります。以下のコマンドで確認可能です。

# 論理CPUコア数を直接表示
$ nproc
4

# または詳細情報を確認
$ lscpu | grep "^CPU(s):"
CPU(s):                4

例えば、CPUが4つのシステムで平均負荷が「2.0」であれば、リソースの50%を使用している計算になります。逆に、1CPUのシステムで「2.0」であれば、処理能力の倍のタスクが滞留していることになります。一般的に、CPU数に対して70%を超える負荷が継続する場合は、調査やチューニングを検討すべきタイミングです。

平均負荷とCPU使用率の違い

平均負荷には「CPUを待っているプロセス」だけでなく「I/Oを待っているプロセス」も含まれる点が重要です。

  • CPU集約型プロセス:計算処理が多いため、CPU使用率と平均負荷がどちらも高くなります。
  • I/O集約型プロセス:ディスク読み書きの待機(iowait)が発生するため、CPU使用率は低くても平均負荷が高くなることがあります。
  • 大量のプロセス実行:プロセススケジューリングのオーバーヘッドにより、CPU使用率・平均負荷ともに上昇します。

負荷原因を特定する分析ツール

負荷が高い原因がCPUにあるのか、あるいはI/Oにあるのかを切り分けるには、mpstatpidstatが有効です。

1. mpstatによるCPU全体の状態確認

# 2秒間隔で全CPUの統計を表示
$ mpstat -P ALL 2
Linux 5.15.0 (node1) 	2023/10/27 	_x86_64_	(2 CPU)

14:30:05  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %idle
14:30:07  all   85.50    0.00   10.20    0.10    0.00    0.20    0.00    0.00   4.00
14:30:07    0   84.00    0.00   11.00    0.10    0.00    0.30    0.00    0.00   4.60
14:30:07    1   87.00    0.00    9.40    0.10    0.00    0.10    0.00    0.00   3.40

この例では%usrが非常に高く、ユーザーアプリケーションによる演算処理が負荷の主因であることがわかります。もし%iowaitが高い場合は、ディスクやネットワークのボトルネックを疑います。

2. pidstatによるプロセス特定

どのプロセスが負荷をかけているかは、pidstatで確認します。

# 2秒間隔でCPU使用率の高いプロセスを表示
$ pidstat -u 2 3
Average:      UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
Average:        0      1234   75.00   15.50    0.00    2.50   90.50     1  heavy-app
Average:        0       567    2.00    5.00    0.00    1.00    7.00     0  sys-daemon

ここではPID 1234の「heavy-app」がCPUを大量に消費していることが明確になります。このように、平均負荷を入り口として詳細なコマンドを組み合わせることで、システムトラブルの根本原因へとアプローチできます。

タグ: linux PerformanceTuning SystemAdministration LoadAverage

8月5日 02:45 投稿