Red Hat Enterprise Linux には多様なリソース監視ツールが付いています。ここには記載されていないツールもありますが、次に機能面で代表的なツールをあげておきます。
free
top (及び GNOME システムモニタ、top のグラフィカル指向のバージョン)
vmstat
リソース監視ツールセットの Sysstat スィート
OProfile システムワイドのプロファイラ
それぞれのツールを詳しく見ていきます。
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 はメモリ使用状況の情報を一度しか表示しません。非常に短期的な監視や、メモリ関連の問題が現在進行中であるかすぐに確認することにしか役に立ちません。free は free オプションでメモリ使用状況の数値を反復して表示する機能がありますが、出力がスクロールし、メモリ使用状況の変化を簡単に見つけるのは困難になります。
![]() | ヒントwatch | ||
---|---|---|---|
free -sを使うより便利なソリューションは、watch コマンドを使った free の実行です。例えば、2 秒毎にメモリ使用状況を表示させるには(watch のデフォルトの間隔)次のコマンドを使います。
watch コマンドが free コマンドを 2 秒毎に発行して、スクリーンをクリアにして更新、新しい出力を同じスクリーンに書き込みます。時間の経過にしたがってメモリ使用状況の変化を測定するのが簡単になります。watch ではスクロールしない単一の更新画面を生成します。-n オプションを使って更新の間隔をコントロールすることができ、-d オプションで変化した部分をハイライトさせることができます。次がそのコマンドです。
詳細については watch の man ページを参照してください。 watch コマンドは |
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 はデフォルトでアイドルプロセスと非アイドルプロセスの両方を表示します。非アイドルプロセスのみを表示するには、
![]() | 警告 |
---|---|
top はシンプルな表示だけのプログラムのように見えますが、そうではありません。topは記号を 1 つ使って多様な動作を行います。例えば、root でログインすると、プライオリティの変更やシステムのプロセスを kill することもできてしまいます。したがって、top のヘルプ画面を見直すまでは ( |
グラフィカルユーザーインターフェースの方が使いやすい場合は、GNOME システムモニタを使用するとよいでしょう。top のように、GNOME システムモニタは全体的なシステムの状況、プロセスカウント、メモリと swap の使用状況、プロセス単位の統計値に関連する情報を表示します。
ただし、GNOME システムモニタはディスク領域の使用状況一覧の他にも、グラフィカルな CPU、メモリ、swap 使用状況なども表示します。図2-1にGNOME システムモニタのプロセス一覧の表示例を示します。
特定プロセスの詳細情報を表示させることができます。まず目的のプロセスをクリックしてから簡易情報ボタンをクリックします。
CPU、メモリ、ディスク使用の統計値を表示させるには、システムモニタのタブをクリックします。
システムパフォーマンスを簡潔に知るには 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 行目では各フィールドの内容を識別し、特定の統計値のデータにすばやく目を通すことができます。
プロセス関連のフィールド
r — CPU へのアクセスを待っている実行可能なプロセスの数
b — 割り込みできないスリープ状態にあるプロセスの数
メモリ関連のフィールド
swpd — 使用されている仮想メモリ量
free — 空きメモリ量
buff — バッファに使用されているメモリ量
cache — ページキャッシュとして使用されているメモリ量
swap 関連のフィールド
si — ディスクから swap インされたメモリ量
so — ディスクに swap アウトされたメモリ量
I/O 関連のフィールド
bi — ブロックデバイスに送られたブロック
bo — ブロックデバイスから受け取ったブロック
システム関連のフィールド
in — 毎秒の割り込み数
cs — 毎秒のコンテキストスイッチ数
CPU 関連のフィールド
us — CPU のユーザーレベルコード実行時間の割合
sy — CPU のシステムレベルコード実行時間の割合
id — CPU がアイドルだった時間の割合
wa — I/O 待機
オプションなしで vmstat を実行すると、表示は 1 行だけです。この行には最後にシステムが起動されたときから算出した平均が表示されます。
しかし、ほとんどのシステム管理者はこの行のデータを信用していません。時間の経過と共に出力が異なるからです。変わりに、ほとんどの管理者は一定間隔でリソース使用状況データを繰り返し表示する vmstat の機能を利用しています。例えば、vmstat 1 は 新しい行をつぎつぎと 1 秒毎に使用状況のデータとして表示していきます。vmstat 1 10 は新しい行を 10 秒間だけ表示していきます。
経験のある管理者なら、リソース使用状況とパフォーマンスの問題を素早く確定するために vmstat を使用します。ただし、こうした問題をさらに詳細に知るには、さらに詳細なデータ収集や分析が行えるツールとして、別のツールが必要となります。
前述のツールが短期的にシステムパフォーマンスの詳細を得るのに役に立つことがありますが、システムリソースの使用状況のスナップショット以上にはあまり役に立ちません。さらに、こうした簡易ツールを使ってでは簡単に監視できないシステムパフォーマンスがあります。
したがって、高度なツールが必要になります。Sysstat がこれになります。
Sysstat には I/O や CPU 統計値の収集に関連する次のようなツールが含まれます。
1 台または複数台のディスクドライブの I/O 統計値の他に、CPU 使用率の概要を表示します。
CPU 統計値の詳細な情報を表示します。
Sysstat にもシステムリソースの使用状況データを収集するツールがあり、そのデータに基づくデイリーレポートを作成します。次のようなツールです。
システムアクティビティのデータコレクタとして知られる sadc は、システムリソース使用状況の情報を収集してファイルに書き込みます。
sadc で作成されたファイルからレポートを生成する sar のレポートはインテラクティブに生成、または、さらに徹底的に分析するためファイルに書き込むことができます。
次のセクションではこれらのツールを詳細に説明します。
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 ページを参照してください。
一見したところ、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 がどれだけ有効に使用されているかを判断することができます。
前述した通り、sadc コマンドはシステムの使用状況データを収集して後日に分析できるようファイルに書き込みます。デフォルトでは、/var/log/sa/ ディレクトリにあるファイルにデータが書き込まれます。ファイル名は sa<dd> になります。<dd> は現在の日付を 2 桁で表します。
sadc は通常、sa1 スクリプトで実行されます。このスクリプトは sysstat ファイルで cron により定期的に発行されます。このファイルは、/etc/cron.d/ にあります。sa1 スクリプトは sadc を 1 度だけ 1 秒の測定間隔で発行します。デフォルトでは、cron は sa1 を 10 分置きに実行し、各測定間隔中に収集したデータを現在の /var/log/sa/sa<dd> ファイルに追加します。
sar コマンドは sadc で収集されたデータに基づいてシステムの使用状況レポートを生成します。Red Hat Enterprise Linux で設定されているように、sar は自動的に実行して sadc で自動的に収集されたファイルを処理します。レポートファイルは /var/log/sa/ に書き込まれ、ファイル名は sar<dd> です。<dd> は前の日付を 2 桁で表しています。
sar は通常、sa2 スクリプトにより実行されます。このスクリプトは、/etc/cron.d/ にある sysstat ファイルで cron により定期的に発行されます。デフォルトでは、cron は sa2 を 1 日に 1 度だけ 23:53 に実行し、sa2 がその日すべてのデータのレポートを生成できるようにします。
デフォルトの 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 ページを参照してください。
システムワイドの OProfile プロファイラはオーバーヘッドの低い監視ツールです。OProfile プロセッサのパフォーマンス監視ハードウェア[3]を使用してパフォーマンス関連の問題の性質を判定します。
パフォーマンス監視ハードウェアはプロセッサの一部です。特殊カウンタの形態をとり、特定イベント(プロセッサがアイドルしていない、要求されたデータがキャッシュにない、など)が発生するたび増加していきます。このようなカウンタが複数あるプロセッサもあり、各カウンタごと異なるイベントタイプを選ぶことができます。
カウンタは初期値を読み込むことにより、オーバーフローすると割り込みを生成することができます。別の初期値でカウンタを読み込むことにより、割り込みが生成されるレートを変えることができます。これにより、サンプルレートを操作することができ、データから取得される詳細レベルが収集されます。
一方の極値でカウンタを設定するとすべてのイベントにオーバーフロー割り込みを生成し、非常に詳細なパフォーマンスデータを提供します(ただし、莫大なオーバーヘッドになる)。他方の極値でカウンタを設定するとできるだけ割り込みを生成しないようになり、システムパフォーマンスのごく一般的な概要だけを提供します(実際には、オーバーヘッド無し)。効果的な監視の秘訣は必要となるデータを得るのに十分なサンプルレートを選択することです。ただし、レートが高すぎるとパフォーマンス監視のオーバーヘッドでシステムがオーバーロードします。
![]() | 警告 |
---|---|
システムが使用不能になるほどのオーバーヘッドが生成されるように OProfile を設定することが可能です。したがって、カウンタ値の設定には注意する必要があります。この理由から、opcontrol コマンドは --list-events オプションをサポートし、それぞれに最小カウンタ値を提示する他に、現在インストールしているプロセッサに利用できるイベントタイプを表示するようになっています。 |
OProfile を使うときには、サンプルレートとオーバーヘッド間のトレードオフに留意することが重要となります。
Oprofile は次のコンポーネントから成り立っています。
データ収集ソフトウェア
データ分析ソフトウェア
管理インターフェースソフトウェア
データ収集ソフトウェアは oprofile.o カーネルモジュールと oprofiled デーモンで構成されます。
データ分析ソフトウェアには次のプログラムが含まれます。
各実行可能ファイル用に収集されたサンプルの数と相対的な割合を表示します。
機能、個別の命令、gprof 系の出力のいずれかで収集されたサンプルの数と相対的割合を表示します。
annotated ソースコードまたは組み立てリストを表示します。
収集されたデータをグラフィカルに表示します。
これらプログラムで収集されたデータを多彩な方法で表示させることができます。
管理インターフェースソフトウェアは、監視するイベントの指定から収集の停止までデータ収集のすべてを制御します。これは opcontrol コマンドを使って行われます。
このセクションでは、初めての設定から最終データ分析まで 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 |
次に、opcontrol を opcontrol --start と一緒に使って実際にデータ収集を開始します。
Using log file /var/lib/oprofile/oprofiled.log Daemon started. Profiler running. |
oprofiled が ps 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) を使用することができます。 |