2.5. Red Hat Enterprise Linux 固有の情報

Red Hat Enterprise Linux には多様なリソース監視ツールが付いています。ここには記載されていないツールもありますが、次に機能面で代表的なツールをあげておきます。

それぞれのツールを詳しく見ていきます。

2.5.1. free

free コマンドではシステムメモリの使用状況を表示します。次がその出力例です。

             total       used       free     shared    buffers     cached
Mem:        255508     240268      15240          0       7592      86188
-/+ buffers/cache:     146488     109020
Swap:       530136      26268     503868

Mem: の列では物理メモリの使用状況を表示しています。Swap: の列はシステムの swap 領域を表示しています。-/+ buffers/cache: の列は現在システムバッファに充てられている物理メモリ量を表示しています。

デフォルトでは free はメモリ使用状況の情報を一度しか表示しません。非常に短期的な監視や、メモリ関連の問題が現在進行中であるかすぐに確認することにしか役に立ちません。freefree オプションでメモリ使用状況の数値を反復して表示する機能がありますが、出力がスクロールし、メモリ使用状況の変化を簡単に見つけるのは困難になります。

ヒントヒントwatch
 

free -sを使うより便利なソリューションは、watch コマンドを使った free の実行です。例えば、2 秒毎にメモリ使用状況を表示させるには(watch のデフォルトの間隔)次のコマンドを使います。

watch free

watch コマンドが free コマンドを 2 秒毎に発行して、スクリーンをクリアにして更新、新しい出力を同じスクリーンに書き込みます。時間の経過にしたがってメモリ使用状況の変化を測定するのが簡単になります。watch ではスクロールしない単一の更新画面を生成します。-n オプションを使って更新の間隔をコントロールすることができ、-d オプションで変化した部分をハイライトさせることができます。次がそのコマンドです。

watch -n 1 -d free

詳細については watch の man ページを参照してください。

watch コマンドは [Ctrl]-[C] で中断されるまで実行を続けます。watch コマンドはさまざまな状況で便利なコマンドですので覚えておいてください。

2.5.2. top

free はメモリ関連の情報しか表示しませんが、top コマンドは全体的な情報を表示します。CPU 使用率、プロセスの統計値、メモリ使用状況などです — top はすべてを監視します。さらに、free コマンドとは異なり、top のデフォルト動作は継続的に実行するようになっています。このため、watch コマンドを使う必要がありません。次が表示例です。

 14:06:32  up 4 days, 21:20,  4 users,  load average: 0.00, 0.00, 0.00
77 processes: 76 sleeping, 1 running, 0 zombie, 0 stopped
CPU states:  cpu    user    nice  system    irq  softirq  iowait    idle
           total   19.6%    0.0%    0.0%   0.0%     0.0%    0.0%  180.2%
           cpu00    0.0%    0.0%    0.0%   0.0%     0.0%    0.0%  100.0%
           cpu01   19.6%    0.0%    0.0%   0.0%     0.0%    0.0%   80.3%
Mem:  1028548k av,  716604k used,  311944k free,       0k shrd,  131056k buff
                    324996k actv,  108692k in_d,   13988k in_c
Swap: 1020116k av,    5276k used, 1014840k free                  382228k cached
                                                                                
  PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME CPU COMMAND
17578 root      15   0 13456  13M  9020 S    18.5  1.3  26:35   1 rhn-applet-gu
19154 root      20   0  1176 1176   892 R     0.9  0.1   0:00   1 top
    1 root      15   0   168  160   108 S     0.0  0.0   0:09   0 init
    2 root      RT   0     0    0     0 SW    0.0  0.0   0:00   0 migration/0
    3 root      RT   0     0    0     0 SW    0.0  0.0   0:00   1 migration/1
    4 root      15   0     0    0     0 SW    0.0  0.0   0:00   0 keventd
    5 root      34  19     0    0     0 SWN   0.0  0.0   0:00   0 ksoftirqd/0
    6 root      35  19     0    0     0 SWN   0.0  0.0   0:00   1 ksoftirqd/1
    9 root      15   0     0    0     0 SW    0.0  0.0   0:07   1 bdflush
    7 root      15   0     0    0     0 SW    0.0  0.0   1:19   0 kswapd
    8 root      15   0     0    0     0 SW    0.0  0.0   0:14   1 kscand
   10 root      15   0     0    0     0 SW    0.0  0.0   0:03   1 kupdated
   11 root      25   0     0    0     0 SW    0.0  0.0   0:00   0 mdrecoveryd

この表示は 2 セクションに別けられます。前半のセクションには全体的なシステムの状況に関連する情報があります — アップタイム、負荷平均、プロセスカウント、CPU状況、メモリと swap 領域両方の使用統計値などです。後半のセクションにはプロセス単位の統計値が表示されます。top の実行中に表示される内容を変更することができます。例えば、top はデフォルトでアイドルプロセスと非アイドルプロセスの両方を表示します。非アイドルプロセスのみを表示するには、[i] を押します。もう一度 [i] を押すとデフォルトの表示モードに戻ります。

警告警告
 

top はシンプルな表示だけのプログラムのように見えますが、そうではありません。topは記号を 1 つ使って多様な動作を行います。例えば、root でログインすると、プライオリティの変更やシステムのプロセスを kill することもできてしまいます。したがって、top のヘルプ画面を見直すまでは ([?] 記号を入力して表示させる)[q] (topの終了)しか入力しないようにするのが安全です。

2.5.2.1. GNOME システムモニタ — グラフィカルな top

グラフィカルユーザーインターフェースの方が使いやすい場合は、GNOME システムモニタを使用するとよいでしょう。top のように、GNOME システムモニタは全体的なシステムの状況、プロセスカウント、メモリと swap の使用状況、プロセス単位の統計値に関連する情報を表示します。

ただし、GNOME システムモニタはディスク領域の使用状況一覧の他にも、グラフィカルな CPU、メモリ、swap 使用状況なども表示します。図2-1GNOME システムモニタプロセス一覧の表示例を示します。

図 2-1. GNOME システムモニタ プロセス一覧の表示例

特定プロセスの詳細情報を表示させることができます。まず目的のプロセスをクリックしてから簡易情報ボタンをクリックします。

CPU、メモリ、ディスク使用の統計値を表示させるには、システムモニタのタブをクリックします。

2.5.3. vmstat

システムパフォーマンスを簡潔に知るには vmstat を使ってみてください。vmstat で、プロセス、メモリ、swap、I/O、システム、CPU のアクティビティの概要を 1 行で表示することができます。

procs                      memory      swap          io     system         cpu
 r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa
 0  0   5276 315000 130744 380184    1    1     2    24   14    50  1  1 47  0
        

1 行目は 6 項目にフィールドが別れています。プロセス、メモリ、swap、I/O、システム、CPU 関連の統計値です。2 行目では各フィールドの内容を識別し、特定の統計値のデータにすばやく目を通すことができます。

プロセス関連のフィールド

メモリ関連のフィールド

swap 関連のフィールド

I/O 関連のフィールド

システム関連のフィールド

CPU 関連のフィールド

オプションなしで vmstat を実行すると、表示は 1 行だけです。この行には最後にシステムが起動されたときから算出した平均が表示されます。

しかし、ほとんどのシステム管理者はこの行のデータを信用していません。時間の経過と共に出力が異なるからです。変わりに、ほとんどの管理者は一定間隔でリソース使用状況データを繰り返し表示する vmstat の機能を利用しています。例えば、vmstat 1 は 新しい行をつぎつぎと 1 秒毎に使用状況のデータとして表示していきます。vmstat 1 10 は新しい行を 10 秒間だけ表示していきます。

経験のある管理者なら、リソース使用状況とパフォーマンスの問題を素早く確定するために vmstat を使用します。ただし、こうした問題をさらに詳細に知るには、さらに詳細なデータ収集や分析が行えるツールとして、別のツールが必要となります。

2.5.4. リソース監視ツールセットの Sysstat スィート

前述のツールが短期的にシステムパフォーマンスの詳細を得るのに役に立つことがありますが、システムリソースの使用状況のスナップショット以上にはあまり役に立ちません。さらに、こうした簡易ツールを使ってでは簡単に監視できないシステムパフォーマンスがあります。

したがって、高度なツールが必要になります。Sysstat がこれになります。

Sysstat には I/O や CPU 統計値の収集に関連する次のようなツールが含まれます。

iostat

1 台または複数台のディスクドライブの I/O 統計値の他に、CPU 使用率の概要を表示します。

mpstat

CPU 統計値の詳細な情報を表示します。

Sysstat にもシステムリソースの使用状況データを収集するツールがあり、そのデータに基づくデイリーレポートを作成します。次のようなツールです。

sadc

システムアクティビティのデータコレクタとして知られる sadc は、システムリソース使用状況の情報を収集してファイルに書き込みます。

sar

sadc で作成されたファイルからレポートを生成する sar のレポートはインテラクティブに生成、または、さらに徹底的に分析するためファイルに書き込むことができます。

次のセクションではこれらのツールを詳細に説明します。

2.5.4.1. The iostat コマンド

iostat コマンドは基本的には CPU とディスク I/O 統計値の概要を提供します。

Linux 2.4.20-1.1931.2.231.2.10.ent (pigdog.example.com)      07/11/2003

avg-cpu:  %user   %nice    %sys   %idle
           6.11    2.56    2.15   89.18

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
dev3-0            1.68        15.69        22.42   31175836   44543290
          

最初の行(システムのカーネルバージョン及びホスト名、現在の日時が表記されている行)の下に、iostat は最後に再起動してからのシステムの平均 CPU 使用状況の概要を表示します。CPU 使用状況のレポートには次のような割合が含まれます。

  • ユーザーモードで消費された時間の割合(アプリケーションの実行など)

  • ユーザーモードで消費された時間の割合(nice(2) を使ってスケジュールプライオリティを変更していたプロセス)

  • カーネルモードで消費された時間の割合

  • アイドルに消費された時間の割合

以下の CPU 使用状況のレポートはデバイスの使用状況レポートです。このレポートは 1 行にシステムのアクティブな各ディスクデバイスを含み、次のような情報があります。

  • デバイスの指定、dev<major-number>-sequence-numberで表示され、<major-number> はデバイスのメジャー番号で [1]<sequence-number> は 0 から始まる連番

  • 毎秒ごとの転送数(または I/O 処理数)

  • 毎秒 512 バイトブロックが読み込まれる数

  • 毎秒 512 バイトブロックが書き込まれる数

  • 512 バイトブロックが読み込まれた総計

  • 512 バイトブロックが書き込まれた総計

これは iostat を使って得られるサンプル情報にすぎません。詳細については、iostat (1) の man ページを参照してください。

2.5.4.2. mpstat コマンド

一見したところ、mpstat コマンドは iostat で生成されるCPU 使用状況レポートと同じように見えます。

Linux 2.4.20-1.1931.2.231.2.10.ent (pigdog.example.com)      07/11/2003

07:09:26 PM  CPU   %user   %nice %system   %idle    intr/s
07:09:26 PM  all    6.40    5.84    3.29   84.47    542.47
          

CPU によって処理される毎秒ごとの割り込みを表示する欄以外、大きな違いはありません。しかし、mpstat-P ALL オプションを使用すると状況が変わってきます。

Linux 2.4.20-1.1931.2.231.2.10.ent (pigdog.example.com)      07/11/2003

07:13:03 PM  CPU   %user   %nice %system   %idle    intr/s
07:13:03 PM  all    6.40    5.84    3.29   84.47    542.47
07:13:03 PM    0    6.36    5.80    3.29   84.54    542.47
07:13:03 PM    1    6.43    5.87    3.29   84.40    542.47
          

マルチプロセッサのシステムでは、mpstat で各 CPU の使用状況が個別に表示されるようになります。これにより、各 CPU がどれだけ有効に使用されているかを判断することができます。

2.5.4.3. sadc コマンド

前述した通り、sadc コマンドはシステムの使用状況データを収集して後日に分析できるようファイルに書き込みます。デフォルトでは、/var/log/sa/ ディレクトリにあるファイルにデータが書き込まれます。ファイル名は sa<dd> になります。<dd> は現在の日付を 2 桁で表します。

sadc は通常、sa1 スクリプトで実行されます。このスクリプトは sysstat ファイルで cron により定期的に発行されます。このファイルは、/etc/cron.d/ にあります。sa1 スクリプトは sadc を 1 度だけ 1 秒の測定間隔で発行します。デフォルトでは、cronsa1 を 10 分置きに実行し、各測定間隔中に収集したデータを現在の /var/log/sa/sa<dd> ファイルに追加します。

2.5.4.4. sar コマンド

sar コマンドは sadc で収集されたデータに基づいてシステムの使用状況レポートを生成します。Red Hat Enterprise Linux で設定されているように、sar は自動的に実行して sadc で自動的に収集されたファイルを処理します。レポートファイルは /var/log/sa/ に書き込まれ、ファイル名は sar<dd> です。<dd> は前の日付を 2 桁で表しています。

sar は通常、sa2 スクリプトにより実行されます。このスクリプトは、/etc/cron.d/ にある sysstat ファイルで cron により定期的に発行されます。デフォルトでは、cronsa2 を 1 日に 1 度だけ 23:53 に実行し、sa2 がその日すべてのデータのレポートを生成できるようにします。

2.5.4.4.1. sar レポートを読み取る

デフォルトの Red Hat Enterprise Linux 設定で生成される sar レポートの形式は複数のセクションから成り立っていて、各セクションには特定タイプのデータが含まれ、データが収集された日の時刻順になっています。sadc は 10 分置きに 1 秒 の測定間隔を行うよう設定されているため、デフォルトの sar レポートには 00:00 から 23;50 までの間、10 分毎に増加していくデータが含まれています[2]

リポートの各セクションはそのセクションに含まれるデータを表す見出しから始まります。見出しはセクション全体に渡り定期的な間隔で反復されるので、レポートに目を通しながらデータを解釈していくのが容易になっています。各セクションはそのセクションで報告されたデータの平均を含んている行で終了です。

ここに sar レポートのサンプルセクションを示します。データは 00:30 から 23;40 までで途中省略しています。

00:00:01          CPU     %user     %nice   %system     %idle
00:10:00          all      6.39      1.96      0.66     90.98
00:20:01          all      1.61      3.16      1.09     94.14
…
23:50:01          all     44.07      0.02      0.77     55.14
Average:          all      5.80      4.99      2.87     86.34
            

このセクションでは、CPU 使用状況の情報が表示されます。iostat で表示されるデータによく似ています。

他のセクションには測定間隔ごと複数行にわたるデータがあることもあります。次に、デュアルプロセッサシステムで収集された CPU 使用状況データから生成されたこのセクションを示します。

00:00:01          CPU     %user     %nice   %system     %idle
00:10:00            0      4.19      1.75      0.70     93.37
00:10:00            1      8.59      2.18      0.63     88.60
00:20:01            0      1.87      3.21      1.14     93.78
00:20:01            1      1.35      3.12      1.04     94.49
…
23:50:01            0     42.84      0.03      0.80     56.33
23:50:01            1     45.29      0.01      0.74     53.95
Average:            0      6.00      5.01      2.74     86.25
Average:            1      5.61      4.97      2.99     86.43
            

デフォルトの Red Hat Enterprise Linux sar 設定で生成されるレポートには合計で 17 セクションあります。次の章でそのいくつかを説明しています。各セクションに含まれるデータについての詳細は sar(1) の man ページを参照してください。

2.5.5. OProfile

システムワイドの OProfile プロファイラはオーバーヘッドの低い監視ツールです。OProfile プロセッサのパフォーマンス監視ハードウェア[3]を使用してパフォーマンス関連の問題の性質を判定します。

パフォーマンス監視ハードウェアはプロセッサの一部です。特殊カウンタの形態をとり、特定イベント(プロセッサがアイドルしていない、要求されたデータがキャッシュにない、など)が発生するたび増加していきます。このようなカウンタが複数あるプロセッサもあり、各カウンタごと異なるイベントタイプを選ぶことができます。

カウンタは初期値を読み込むことにより、オーバーフローすると割り込みを生成することができます。別の初期値でカウンタを読み込むことにより、割り込みが生成されるレートを変えることができます。これにより、サンプルレートを操作することができ、データから取得される詳細レベルが収集されます。

一方の極値でカウンタを設定するとすべてのイベントにオーバーフロー割り込みを生成し、非常に詳細なパフォーマンスデータを提供します(ただし、莫大なオーバーヘッドになる)。他方の極値でカウンタを設定するとできるだけ割り込みを生成しないようになり、システムパフォーマンスのごく一般的な概要だけを提供します(実際には、オーバーヘッド無し)。効果的な監視の秘訣は必要となるデータを得るのに十分なサンプルレートを選択することです。ただし、レートが高すぎるとパフォーマンス監視のオーバーヘッドでシステムがオーバーロードします。

警告警告
 

システムが使用不能になるほどのオーバーヘッドが生成されるように OProfile を設定することが可能です。したがって、カウンタ値の設定には注意する必要があります。この理由から、opcontrol コマンドは --list-events オプションをサポートし、それぞれに最小カウンタ値を提示する他に、現在インストールしているプロセッサに利用できるイベントタイプを表示するようになっています。

OProfile を使うときには、サンプルレートとオーバーヘッド間のトレードオフに留意することが重要となります。

2.5.5.1. OProfile のコンポーネント

Oprofile は次のコンポーネントから成り立っています。

  • データ収集ソフトウェア

  • データ分析ソフトウェア

  • 管理インターフェースソフトウェア

データ収集ソフトウェアは oprofile.o カーネルモジュールと oprofiled デーモンで構成されます。

データ分析ソフトウェアには次のプログラムが含まれます。

op_time

各実行可能ファイル用に収集されたサンプルの数と相対的な割合を表示します。

oprofpp

機能、個別の命令、gprof 系の出力のいずれかで収集されたサンプルの数と相対的割合を表示します。

op_to_source

annotated ソースコードまたは組み立てリストを表示します。

op_visualise

収集されたデータをグラフィカルに表示します。

これらプログラムで収集されたデータを多彩な方法で表示させることができます。

管理インターフェースソフトウェアは、監視するイベントの指定から収集の停止までデータ収集のすべてを制御します。これは opcontrol コマンドを使って行われます。

2.5.5.2. OProfile セッションの例

このセクションでは、初めての設定から最終データ分析まで OProfile 監視とデータ分析について示しています。基本的な概要のみになりますので、詳細についてはRed Hat Enterprise Linux システム管理ガイドを参照してください。

opcontrol を次のコマンドと一緒に使って収集すべきデータの種類を設定します。

opcontrol \
    --vmlinux=/boot/vmlinux-`uname -r` \
    --ctr0-event=CPU_CLK_UNHALTED \
    --ctr0-count=6000

ここで使用しているオプションは opcontrol に次のことを指示しています。

  • OProfile を現在実行中のカーネルのコピーにダイレクトします。 \n(--vmlinux=/boot/vmlinux-`uname -r`)

  • プロセッサのカウンタ 0 が使用されること、及び CPU が命令を実行しているときにイベントが監視されることを指定しています (--ctr0-event=CPU_CLK_UNHALTED)。

  • OProfile は指定したイベントが 6000 回発生する毎にサンプルを収集することを指定しています (--ctr0-count=6000)。

次に、oprofile カーネルモジュールが lsmod コマンドを使って読み込まれていることを確認します。

Module                  Size  Used by    Not tainted
oprofile               75616   1
…

ls /dev/oprofile/ コマンドで OProfile ファイルシステム (/dev/oprofile/ にある)が マウントされていることを確認します。

0  buffer       buffer_watershed  cpu_type  enable       stats
1  buffer_size  cpu_buffer_size   dump      kernel_only

(ファイルの明確な数はプロセッサのタイプによって異なります。)

これで、/root/.oprofile/daemonrc ファイルにデータ収集ソフトウェアに必要な設定が含まれるようになります。

CTR_EVENT[0]=CPU_CLK_UNHALTED
CTR_COUNT[0]=6000
CTR_KERNEL[0]=1
CTR_USER[0]=1
CTR_UM[0]=0
CTR_EVENT_VAL[0]=121
CTR_EVENT[1]=
CTR_COUNT[1]=
CTR_KERNEL[1]=1
CTR_USER[1]=1
CTR_UM[1]=0
CTR_EVENT_VAL[1]=
one_enabled=1
SEPARATE_LIB_SAMPLES=0
SEPARATE_KERNEL_SAMPLES=0
VMLINUX=/boot/vmlinux-2.4.21-1.1931.2.349.2.2.entsmp

次に、opcontrolopcontrol --start と一緒に使って実際にデータ収集を開始します。

Using log file /var/lib/oprofile/oprofiled.log
Daemon started.
Profiler running.

oprofiledps x | grep -i oprofiled コマンドで実行しているか確認します。

32019 ?        S      0:00 /usr/bin/oprofiled --separate-lib-samples=0 …
32021 pts/0    S      0:00 grep -i oprofiled

(ps で表示される実際の oprofiled コマンドラインはこれより長くなりますが、ここでは短くしてあります。)

これでシステムが監視されるようになり、システム上の実行可能ファイルはすべてデータが収集されます。このデータは /var/lib/oprofile/samples/ ディレクトリに保存されます。このディレクトリのファイルはちょっと変わったネーミング規則に従います。ここにその例を示します。

}usr}bin}less#0

ネーミング規則は実行可能コードを含んでいる各ファイルの絶対パスを使用し、スラッシュ記号 (/) は中括弧の右 (}) に置き換えられます。また、ポンド記号 (#) の後に数字(この場合、0)が付いて終了します。従って、この例で使用されているファイルは /usr/bin/less が実行中に収集されたデータであることを表しています。

データが収集されたら、いずれかの分析ツールを使って表示します。OProfile の便利な特徴のひとつとして、データ分析を行う前にデータ収集を停止する必要がないということです。しかし、少なくとも 1 組のサンプルセットがディスクに書き込まれるまで待つか、opcontrol --dump コマンドを使ってサンプルをディスクへ強制的に移動させる必要があります。

次の例では、op_time を使用して収集されているサンプルを表示しています(逆順 —サンプル数の高いものから低いもの)。

3321080   48.8021  0.0000 /boot/vmlinux-2.4.21-1.1931.2.349.2.2.entsmp
761776    11.1940  0.0000 /usr/bin/oprofiled
368933     5.4213  0.0000 /lib/tls/libc-2.3.2.so
293570     4.3139  0.0000 /usr/lib/libgobject-2.0.so.0.200.2
205231     3.0158  0.0000 /usr/lib/libgdk-x11-2.0.so.0.200.2
167575     2.4625  0.0000 /usr/lib/libglib-2.0.so.0.200.2
123095     1.8088  0.0000 /lib/libcrypto.so.0.9.7a
105677     1.5529  0.0000 /usr/X11R6/bin/XFree86
…

レポートは数百行の長さになることがありますので、レポートをインテラクティブに生成するときに less を使用すると便利です。ここに示す例は短くしてあります。

この特定レポートの形式は、サンプルが収集された各実行可能ファイルに対して 1 行生成されます。各行は次のような形式になります。

<sample-count> <sample-percent> <unused-field> <executable-name> 

表示対象

  • <sample-count> は収集されたサンプルの数を表しています。

  • <sample-percent> はこの特定実行可能ファイルに対して収集されたサンプルすべての割合を表しています。

  • <unused-field> は使用されていないフィールドです。

  • <executable-name> はサンプルが収集された実行可能コードを含むファイル名を表しています。

このレポート(ほとんどアイドル状態のシステムで生成)では、カーネル内で CPU がコードを実行していた間にサンプルの半分近くが収集されたことを表しています。次の行は OProfile データ収集デーモンで、その次には各種のライブラリが続き最後に X Window System サーバの XFree86 が表示されています。このサンプルセッションを実行しているシステムの場合、値に 6000 が使用されたカウンタは opcontrol --list-events で推奨される最小値を表示しているのがわかります。つまり、— 少なくともこの特定システムの場合は — OProfile のオーバーヘッドは最高でざっと CPU の 11% を消費しているということになります。

注記

[1]

デバイスのメジャー番号は /dev/ にある目的デバイスファイルを表示させる ls -l を使って確認できます。メジャー番号はデバイスのグループ指定の後に表示されます。

[2]

システム負荷の変更により、データが収集された実際の時刻には 1、2 秒のずれが生じることもあります

[3]

OProfile はパフォーマンス監視ハードウェアがないシステムアーキテクチャにもフォールバック (TIMER_INT) を使用することができます。