読者です 読者をやめる 読者になる 読者になる

サーバ負荷の確認

◆ 確認方法

topコマンド

操作

入力 *説明
M メモリ使用量が多いもの順
N プロセスID順
P CPUの使用時間率の長いもの順
R ソート順の逆転
T 実行時間が長い順
q topコマンドの終了
s 表示の更新間隔(単位は秒)
u 特定のユーザー権限のプロセスだけ
1 CPU毎の利用率を表示

表示項目

項目 説明
load average 左から順に1、5、15分間の実行待ちプロセスの平均数(uptime)
us ユーザが実行しているプロセスの割合
id CPUが休んでいる割合
wa File I/Oの待ち割。ディスクI/Oかネットワーク
  • load averageの数字がCPU数より大きい場合サーバは重いと判断
  • usの割合が大きいとしたら、サーバ重い原因はCUPがボトルネック
  • idの割合大きい場合、CPUがあまり使ってない状態です。それでもサーバが重いなら、原因は別の場所
  • waの割合大きい場合、ディスクI/Oかネットワークがボトルネックになっている

vmstat コマンド

一番最初の行は, 前回起動時からの平均値で, 2行目以降は実行した時点での状態を表示しています。
オプションでインターバルを指定

項目 説明
r 実行待ちプロセス数
b 割り込み不可プロセス数(多くの場合 I/O 待ちプロセス)
swpd スワップ使用量
free 空きメモリ量
si ディスクからのメモリスワップ
so ディスクへのメモリスワップ
bi ブロックデバイスからの読込みブロック数
bo ブロックデバイスへの書込みブロック数
us ユーザCPU利用率
sy システムCPU利用率
id CPUアイドル率
wa IO待ちCPU利用率
  • r のプロセスが多く us の CPU利用率が高い
    実行可能プロセスが CPU 待ちタスクが多すぎて捌ききれていない

  • si, so が多発している
    メモリ不足。 データベースサーバはメモリ不足によるスワップを起こしやすい

  • b のプロセスが多く, wa の CPU利用率が高い
    I/O待ちをしているプロセスがたくさんある

  • b のプロセスがあまりにも多く, CPU利用率や bi/bo の数値が低い場合
    サーバに何か異変が起こっている場合が多いです。この場合は, 原因となっているプロセスを top や ps コマンドで特定し, プロセスを kill しましょう。

sar

項目 説明
r 実行待ちプロセス数
sar -u CPU使用率を表示する
sar -b ディスクI/Oの使用状況を表示する
sar -W スワップ頻度を表示する
sar -q ロードアベレージやrunqの大きさを表示する
sar -r メモリの使用状況を表示する
sar -P {0, 1, ... ALL} | プロセッサごとに統計値を表示する
sar -f /var/log/sa/sann 日付を指定して過去の統計情報を表示する
sar -A すべての情報を表示する
  • %userが高い場合は、ユーザー空間のプロセスがCPUを消費しています。
    よくある要因としては「純粋にCPUパワーが必要な処理(数値計算、画像や動画の変換など)を行っている」ことや「意図しない暴走でCPUを消費している」ことが考えられます。

  • %systemが高い場合は、システム空間のプロセスがCPUを消費しています。
    よくある要因としては「I/O待ちでCPU時間を消費している」ことや「大きめのプロセスを頻繁にforkしている」ことが考えられます。

  • %iowaitと%systemがともに高い場合は、readやwriteの応答を待ってI/O待ちが発生しています。
    これは、I/O待ちが発生するとreadやwriteのシステムコールに要する時間も増えるため、%systemも上昇するためです。

  • %iowaitが高いにもかかわらず%systemが低い場合は、物理メモリ量を超えてメモリを使ってしまい、スワップが大量に発生している可能性があります。
    この場合は、sar -Wコマンドでスワップ頻度を、freeコマンドでメモリ使用状況を、topコマンドをメモリ使用率でソートしてメモリを消費しているプロセスを確認します。

◆ 参考