サーバ負荷の確認方法


gradio

CPU 負荷の計測

負荷が高くサーバが重いと感じる場合、まずロードアベレージを確認します。
ロードアベレージの確認には uptimetop、あるいはsarコマンドで-qオプションを利用します。

uptimetop は minimam構成でインストールしたディストリビューションでも入っていると思いますが、
sar は minimam構成だと入らないことがあるので注意が必要です。
sysstat パッケージが入っていれば、使用することができます。

ロードアベレージとして表示される数値は “処理を実行したいが、何かが原因で実行できずに待ち状態となっているプロセス数です。”
実行待ち状態のプロセスは、処理が遅延しているということなので、ロードアベレージの値はサーバ負荷の判断基準になる数値です。
よく言い伝えられているのは、ロードアベレージがCPUコア数より大きくなっている場合は、“処理が追いついていない” 状態であると言えます。

1コアのCPU使用率が100%の状態がどれだけ続いたとしても、その間のロードアベレージが1であれば、プロセスの待ち状態は発生しておらず、1つのプロセスがCPUをフルパワーで動かし続けたという状態です。
少しスペック不足かもしれませんが、素晴らしいサイジングなサーバです。

実行待ちが発生する主な原因は以下の2つです。
* 他のプロセスの処理にCPUが使われているため、別のプロセスがその処理が終了するのを待っている状態(CPU負荷)
* ディスクへの読み書き要求を発行して、その結果を待っている状態(I/O負荷)

入ってないです。

このパッケージです。

uptime を使用してもいいのですが実行待ちプロセスとかを表示してくれないので、
今回は sar を使います。
topはシェルスクリプトに組み込みにくいのでやめます。

sar はvmstat のように何秒間隔で何回表示というように指定できます。

出力される各項目は以下の通りです。

項目 説明
runq-sz run queueに溜まっているプロセス数
plist-sz 実行中スレッド数
ldavg-1 1分間の平均値
ldavg-5 5分間の平均値
ldavg-15 15分間の平均値

core の平均値でCPU使用率を計測する

core 毎の使用率も表示したい場合は -P オプションを使用します。

項目 説明
%user userプロセスによるCPU使用率の割合
%nice nice値を変更したユーザプロセスによるCPU使用率の割合
%system systemプロセスによるCPU使用率の割合
%iowait I/O終了待ち時間の割合
%steal 仮想サーバがCPUを使って待たされていた時間の割合
%idle I/O待ち以外でCPUが何もしないで待っていた時間の割合

%user が高い場合:

ユーザプロセスがCPUを使用している状態で、基本的にはI/Oのボトルネック等ではありません。主な原因は下記の2つ。

  • 単にプロセスがCPUパワーを必要な処理をしている。
  • プロセスが暴走して大量にCPUを消費しています。

%system が高い場合

kernelの処理などにCPUを消費している状態です。原因としては以下のようなものが考えられます。

  • I/O負荷でCPUを消費している
  • 大きいプロセスを高頻度でforkしている

%iowait が高い場合

I/O負荷は、CPUがアイドル状態で、OS上に未完了のIOリクエストが存在した時間の割合を示します。
システムの応答が遅い場合に、%userや%system にくらべて %iowait が高い状態である場合は、
CPUを使用する処理が大きくないのに、I/Oリクエストが長い時間処理をしてる状態で、I/Oがボトルネックになっている可能性が高いです。
(求められるI/O要求に対して、ディスクの処理速度が追いついていない状態になっています)

  • アプリケーション自体がディスクにアクセスする速度が遅い
  • メモリが不足していてスワップへのアクセスが頻発していて遅い

以上、負荷試験の方法についてはまた後日掲載しようとおもいます。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です