目次
概要
お使いのシステムの状態を確認するため、数多くのプログラムやツール、 ユーティリティなどが用意されています。この章では、これらユーティリティの うちのいくつかを紹介するほか、日々の定型作業をこなすのに便利なユーティリティや、 それらの中の最も重要なパラメータについても紹介しています。
本章でコマンドを紹介する際には、コマンドと共にその出力例も表示しています。
たとえば下記の例では、最初の行がコマンドそれ自身 (行頭に > や # が書かれます)
を示し、それ以降がコマンドの出力例になっています。途中の出力などを省略する場合
は、大括弧 ([...]
) を利用して表記します。また、表記上の
理由で長い行を途中で改行する場合は、バックスラッシュ (日本語環境では円マーク)
(\
) を行末に表記します。
# command -x -y 出力 行 1 出力 行 2 出力 行 3 は厄介なまでに長いので、改行を入れて \ 行を区切っています。 出力 行 4 [...] 出力 行 98 出力 行 99
説明は、できる限り多くのユーティリティを紹介したいという意図から、できる限り
簡潔に記しています。全てのコマンドに対する詳しい情報は、各マニュアルページを
お読みください。多くのコマンドでは --help
オプションを指定
することにより、利用可能なパラメータの一覧と、簡易な説明が表示されます。
多くの Linux システム監視ツールは、システムの一部分を監視するのに特化した仕組み になっていますが、 「十徳ナイフ」 のようなシステム状態を一括表示 するようなものも少数存在しています。まずはこれらのツールを利用してシステム状態の 概要をつかむとともに、どの部分についてより細かい調査を必要とするのかを確認して ください。
vmstat はプロセスやメモリ、 I/O や割り込み、 CPU に関する情報を収集します。 パラメータに採取間隔を指定せずに実行すると、直近の再起動以後の平均値を表示します。 パラメータに採取間隔を指定して実行すると、実際の採取間隔ごとに値を表示します:
例2.1 vmstat 負荷の軽いマシンでの出力
tux@mercury:~> vmstat -a 2 procs -----------memory---------- ---swap-- -----io---- -system-- -----cpu------- r b swpd free inact active si so bi bo in cs us sy id wa st 0 0 0 750992 570648 548848 0 0 0 1 8 9 0 0 100 0 0 0 0 0 750984 570648 548912 0 0 0 0 63 48 1 0 99 0 0 0 0 0 751000 570648 548912 0 0 0 0 55 47 0 0 100 0 0 0 0 0 751000 570648 548912 0 0 0 0 56 50 0 0 100 0 0 0 0 0 751016 570648 548944 0 0 0 0 57 50 0 0 100 0 0
例2.2 vmstat 負荷の重いマシンでの出力 (特に CPU を使用しているマシン)
tux@mercury:~> vmstat 2 procs -----------memory----------- ---swap-- -----io---- -system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 32 1 26236 459640 110240 6312648 0 0 9944 2 4552 6597 95 5 0 0 0 23 1 26236 396728 110336 6136224 0 0 9588 0 4468 6273 94 6 0 0 0 35 0 26236 554920 110508 6166508 0 0 7684 27992 4474 4700 95 5 0 0 0 28 0 26236 518184 110516 6039996 0 0 10830 4 4446 4670 94 6 0 0 0 21 5 26236 716468 110684 6074872 0 0 8734 20534 4512 4061 96 4 0 0 0
vmstat の出力のうち最初の行には、常に直近の再起動からの平均値が表示されます。 |
各列には、それぞれ下記の値が表示されます:
実行キューに入っているプロセス数が表示されます。これらのプロセスは、処理を 行なうために CPU の空きを待っている状態です。ここの値が利用可能な CPU 数 よりも定常的に大きい場合は、 CPU の処理能力が不足していることを示します。
CPU 以外の資源を待機しているプロセス数が表示されます。ここの値が高い場合は、 入出力 (ネットワークまたはディスク) に問題があることを示しています。
現在使用中のスワップ領域の量 (キロバイト単位) が表示されます。
未使用のメモリ量 (キロバイト単位) が表示されます。
未使用メモリのうち、再利用可能な量の最新値を示しています。この列は、
vmstat のパラメータに -a
(推奨パラメータ)
を指定した場合にのみ表示されます。
通常は再利用できない、直近で使用されているメモリの量を表示しています。
この列は、 vmstat のパラメータに -a
(推奨パラメータ) を指定した場合にのみ表示されます。
RAM 内にあるファイルバッファキャッシュのサイズ (キロバイト単位) が表示
されます。この値は、 vmstat のパラメータに
-a
(推奨パラメータ) を指定した場合には表示されません。
RAM 内にあるページキャッシュのサイズ (キロバイト単位) が表示されます。
この値は、 vmstat のパラメータに
-a
(推奨パラメータ) を指定した場合には表示されません。
1 秒あたりにスワップ領域から RAM に移動したデータの量 (キロバイト単位) が表示されます。この列の値が長い時間高い値を示している場合、お使いの マシンに RAM を追加したほうがよりよいことを示しています。
1 秒あたりに RAM からスワップ領域に移動したデータの量 (キロバイト単位) が表示されます。この列の値が長い時間高い値を示している場合、お使いの マシンに RAM を追加したほうがよりよいことを示しています。
1 秒あたりにブロックデバイス (ディスクなど) から読み出したブロック数が 表示されます。スワップ処理が起こった場合にも、この値が増加します。
1 秒あたりにブロックデバイス (ディスクなど) に書き込んだブロック数が 表示されます。スワップ処理が起こった場合にも、この値が増加します。
1 秒あたりの割り込み数が表示されます。この値が高い場合、入出力 (ネットワークまたはディスク) が多く発生していることを示します。
1 秒あたりのコンテキストスイッチ数が表示されます。この値を簡単に言うと、 カーネルが複数のプログラムを実行するため、一方のプログラムから他方のプログラム に実行コードを切り替えた回数を示しています。
ユーザプロセスによる CPU 使用率をパーセンテージで示しています。
システムプロセスによる CPU 使用率をパーセンテージで示しています。
CPU がアイドル状態 (未使用の状態) にあった割合をパーセンテージで示しています。 この値が長い時間ずっとゼロであった場合、お使いの CPU が使い切られていることを 示しています。これは特に悪い兆候というわけではありません。
や の値をそれぞれ確認し、十分な CPU 性能があることを 確認できれば、特にこの値が小さくても心配する必要はありません。"wa" の時間がゼロより大きい値を示している場合、データの入出力待ちでスルー プット (処理速度) が落ちていることを示しています。これはたとえばファイルを 初めて読み込むような場合や、裏での書き込み処理が追いつかないような場合には 避けられないものではあります。また、この値はハードウエア上のボトルネック (たとえばネットワークやハードディスク) が存在していることを示している場合も あります。それ以外にも、仮想メモリマネージャ (詳しくは 第15章 メモリ管理サブシステムのチューニング をお読みください) のチューニングを行なう余地があることを示している場合も あります。
仮想マシンで使用された CPU 時間のパーセンテージを表示しています。
さらなるオプションについては、 vmstat --help
をお読みください。
sar コマンドはほぼ全ての重要なシステム動作についてレポートを
生成することのできるツールで、 CPU やメモリ、 IRQ の使用率、入出力やネットワーク
などの情報を表示することができます。また本コマンドはレポートをその場で作成すること
ができるほか、システム動作の収集プログラムである sadc が過去に
採取した既存の情報から作成することもできます。なお、 sar や
sadc は全て /proc
ファイルシステムが
提供する情報を利用しています。
sysstat パッケージ | |
---|---|
sar と sadc は、いずれも
|
お使いのシステムを長い期間にわたって監視したい場合は、 sadc
を利用してデータを自動収集させることをお勧めします。収集したデータは後から
sar コマンドで読み込むことができます。 sadc
を起動するには、 /etc/init.d/boot.sysstat start を
実行してください。このコマンドは下記の既定の設定で sadc
を呼び出すよう /etc/cron.d/
にリンクを追加するものです。
利用可能な全てのデータを収集する。
データは
/var/log/sa/saDD
に書き込む。ここで DD
は現在の日 (日付) を示すものとする。
既にファイルが存在する場合、ファイルはアーカイブされる。
概要レポートは
/var/log/sa/sarDD
に書き込む。ここで DD
は現在の日 (日付) を示す
ものとする。既にファイルが存在する場合、ファイルはアーカイブされる。
データは 10 分間隔で収集し、概要レポートは 6 時間ごとに作成する (/etc/sysstat/sysstat.cron をお読みください) 。
データは /usr/lib64/sa/sa1
で収集する
(32 ビット環境の場合は /usr/lib/sa/sa1
)
概要は /usr/lib64/sa/sa2
で作成する
(32 ビット環境の場合は /usr/lib/sa/sa2
)
設定をカスタマイズしたい場合は、 sa1
と
sa2
のスクリプトをコピーし、必要に応じて修正して
ください。また、 /etc/cron.d/sysstat
にある
シンボリックリンクを /etc/sysstat/sysstat.cron
のカスタマイズ版と入れ替えてください。
レポートをその場で作成するには、 sar コマンドに間隔
(秒) とカウントを指定して実行します。ファイルからレポートを作成するには、
間隔指定の代わりに -f
オプションを利用し、ファイル名を
指定してください。ファイル名と間隔、カウントのいずれも指定しなければ、
/var/log/sa/sa
ファイルからレポートを生成します。ここで DD
DD
には今日の日 (日付) が入ります。上記のディレクトリは sadc
がデータを書き込む際の既定のディレクトリです。複数のファイルを読み込む場合は、
-f オプションを必要な数だけ指定してください。
sar 2 10 # その場でレポートを作成する。 2 秒間隔で 10 回分。 sar -f ~/reports/sar_2010_05_03 # sar_2010_05_03 ファイルへの問い合わせ。 sar # /var/log/sa/ にある本日分のファイルへの問い合わせ。 cd /var/log/sa &&\ sar -f sa01 -f sa02 # /var/log/sa/0[12] のファイルへの問い合わせ。
sar の便利な使用例と解釈は後述します。各列の意味について、
詳しくは sar の man (1)
(マニュアルページ) をお読みください。マニュアルページには、 sar
が提供する数多くのオプション指定やレポート生成方法が書かれています。
何もオプションを指定せずに呼び出した場合、 sar は CPU
について基本的なレポートを作成します。マルチプロセッサマシンの場合、全ての
CPU に対する結果が合計されて表示されます。個別の CPU に対して別々の統計
情報を得たい場合は、 -P ALL
オプションをお使いください。
mercury:~ # sar 10 5 Linux 2.6.31.12-0.2-default (mercury) 03/05/10 _x86_64_ (2 CPU) 14:15:43 CPU %user %nice %system %iowait %steal %idle 14:15:53 all 38.55 0.00 6.10 0.10 0.00 55.25 14:16:03 all 12.59 0.00 4.90 0.33 0.00 82.18 14:16:13 all 56.59 0.00 8.16 0.44 0.00 34.81 14:16:23 all 58.45 0.00 3.00 0.00 0.00 38.55 14:16:33 all 86.46 0.00 4.70 0.00 0.00 8.85 Average: all 49.94 0.00 5.38 0.18 0.00 44.50
(入出力を待機していた CPU 時間の割合) が長い 時間ゼロよりも顕著に大きい場合は、入出力のシステム (ネットワークやハード ディスク) にボトルネックが存在することを示しています。また、 が長い時間ゼロであった場合は、お使いの CPU の 性能を使い切っていることを示しています。 capacity.
-r
¶
お使いのシステムメモリ (RAM) について概要を生成するには、
-r
オプションを使用します:
mercury:~ # sar -r 10 5 Linux 2.6.31.12-0.2-default (mercury) 03/05/10 _x86_64_ (2 CPU) 16:12:12 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit 16:12:22 548188 1507488 73.33 20524 64204 2338284 65.10 16:12:32 259320 1796356 87.39 20808 72660 2229080 62.06 16:12:42 381096 1674580 81.46 21084 75460 2328192 64.82 16:12:52 642668 1413008 68.74 21392 81212 1938820 53.98 16:13:02 311984 1743692 84.82 21712 84040 2212024 61.58 Average: 428651 1627025 79.15 21104 75515 2209280 61.51
最後の 2 列 (
と ) には、現在の負荷量を処理するにあたって必要な合計のメモリ容量 (RAM とスワップ の合計) の最大値をそれぞれキロバイト単位とパーセント単位で表示しています。-B
¶
カーネルのページングに関する統計情報を表示するには、 -B
オプションを使用します。
mercury:~ # sar -B 10 5 Linux 2.6.31.12-0.2-default (mercury) 03/05/10 _x86_64_ (2 CPU) 16:11:43 pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff 16:11:53 225.20 104.00 91993.90 0.00 87572.60 0.00 0.00 0.00 0.00 16:12:03 718.32 601.00 82612.01 2.20 99785.69 560.56 839.24 1132.23 80.89 16:12:13 1222.00 1672.40 103126.00 1.70 106529.00 1136.00 982.40 1172.20 55.33 16:12:23 112.18 77.84 113406.59 0.10 97581.24 35.13 127.74 159.38 97.86 16:12:33 817.22 81.28 121312.91 9.41 111442.44 0.00 0.00 0.00 0.00 Average: 618.72 507.20 102494.86 2.68 100578.98 346.24 389.76 492.60 66.93
(1 秒あたりのメジャーフォルト) の列には、 ディスク (スワップ) からメモリ無いに読み込まれたページ数が書かれています。 メジャーフォルトの値が大きくなるとシステムの速度を低下させてしまうため、 メインメモリの不足を意味する指標になります。また、 の列にはメインメモリ内のキャッシュやスワップキャッシュ ( ) に対する スキャン済みページ数 ( ) の割合が表示されています。これはページの 再利用について効率値を示すもので、 100 に近い値を示す (それぞれスワップアウト された未使用のページが再利用されている) か、もしくは 0 に近い値を示す (ページがスキャンされていない) ほどシステムが効率よく働いていることを示します。 なお、この値は 30 より小さい値になるべきではありません。
-d
¶
ブロックデバイス (ハードディスク、光学ドライブ、 USB ストレージデバイスなど)
についての統計情報を表示するには、 -d
オプションを使用します。
の列を見やすくするため、 -p
(pretty-print) の追加オプションを使用していることをご確認ください。
mercury:~ # sar -d -p 10 5 Linux 2.6.31.12-0.2-default (neo) 03/05/10 _x86_64_ (2 CPU) 16:28:31 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 16:28:41 sdc 11.51 98.50 653.45 65.32 0.10 8.83 4.87 5.61 16:28:41 scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 16:28:41 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 16:28:51 sdc 15.38 329.27 465.93 51.69 0.10 6.39 4.70 7.23 16:28:51 scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 16:28:51 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 16:29:01 sdc 32.47 876.72 647.35 46.94 0.33 10.20 3.67 11.91 16:29:01 scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 16:29:01 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 16:29:11 sdc 48.75 2852.45 366.77 66.04 0.82 16.93 4.91 23.94 16:29:11 scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 16:29:11 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 16:29:21 sdc 13.20 362.40 412.00 58.67 0.16 12.03 6.09 8.04 16:29:21 scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util Average: sdc 24.26 903.52 509.12 58.23 0.30 12.49 4.68 11.34 Average: scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
お使いのマシンに複数のディスクが接続されている場合、全てのディスクに対して 平均的に入出力要求が分散していると最高の性能を引き出すことができます。
行の , , の値を 全てのディスクに対して比較してください。 と の列にある値が定常的に高い場合は、ディスク内の 空き容量が不足していることが考えられます。-n キーワード
¶
-n
オプションを指定すると、ネットワークに関連する複数の
レポートを生成することができます。 -n
に続いて下記の
キーワードを指定してください:
DEV: 全てのネットワークデバイスに対する統計 レポートを生成します。
EDEV: 全てのネットワークデバイスに対するエラー 統計レポートを生成します。
NFS: NFS の統計レポートを生成します。 client
NFSD: NFS サーバの統計レポートを生成します。
SOCK: ソケットに関する統計レポートを生成します。
ALL: 全てのネットワーク統計情報を生成します。
sar のレポートは人間にとってそれほど見やすいものとは言えません。 kSar と呼ばれる sar データの視覚化 Java アプリケーションが ありますが、これを利用することで見やすいグラフを作成することができます。 また、このアプリケーションは PDF 形式でのレポートを作成することもできるほか、 その場での作成や過去データのファイルから作成することもできます。 なお、 kSar は BSD ライセンスで提供されています。詳しくは http://ksar.atomique.net/ をお読みください。
iostat はシステムデバイスの負荷を監視します。 お使いのシステムに接続された物理ディスクの負荷について、うまく バランスをとるための便利なレポートを提供します。
最初の iostat レポートでは、システム起動後から 収集し続けられた統計情報を表示します。それ以降のレポートでは、前回の レポートからの差分を表示します。
tux@mercury:~> iostat Linux 2.6.32.7-0.2-default (geeko@buildhost) 02/24/10 _x86_64_ avg-cpu: %user %nice %system %iowait %steal %idle 0,49 0,01 0,10 0,31 0,00 99,09 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 1,34 5,59 25,37 1459766 6629160 sda1 0,00 0,01 0,00 1519 0 sda2 0,87 5,11 17,83 1335365 4658152 sda3 0,47 0,47 7,54 122578 1971008
-n
オプションを指定すると、 iostat
はネットワークファイルシステム (NFS) に関する負荷情報を表示するように
なります。また、 -x
オプションを指定すると、
より広い範囲の統計情報を表示します。
また、どのデバイスをどれくらいの時間間隔で監視するのかを指定する
ことができます。たとえば iostat -p
sda 3
5 のように入力すると、デバイス sda に関するレポートを
3 秒間隔で 5 回表示します。
sysstat パッケージ | |
---|---|
iostat は sysstat パッケージの一部分です。 YaST を利用するか、もしくは zypper in sysstat コマンドでパッケージをインストールしてください。 |
mpstat ユーティリティは、利用可能な各プロセッサの 動作状況を調査します。お使いのシステムにプロセッサが 1 基しか搭載 されていない場合は、全体の平均統計情報が表示されます。
-P
オプションを指定すると、報告すべきプロセッサを
番号で指定することができます (0 が 1 基目になります) 。
タイミングに関するオプションは、 iostat のものと
同じやり方で指定します。たとえば mpstat -P
1 2 5 のように入力すると、 2 秒間隔で 5 回、 2 基目の
プロセッサ (番号指定で 1) に関するレポートを出力します。
tux@mercury:~> mpstat -P 1 2 5 Linux 2.6.32.7-0.2-default (geeko@buildhost) 02/24/10 _x86_64_ 08:57:10 CPU %usr %nice %sys %iowait %irq %soft %steal \ %guest %idle 08:57:12 1 4.46 0.00 5.94 0.50 0.00 0.00 0.00 \ 0.00 89.11 08:57:14 1 1.98 0.00 2.97 0.99 0.00 0.99 0.00 \ 0.00 93.07 08:57:16 1 2.50 0.00 3.00 0.00 0.00 1.00 0.00 \ 0.00 93.50 08:57:18 1 14.36 0.00 1.98 0.00 0.00 0.50 0.00 \ 0.00 83.17 08:57:20 1 2.51 0.00 4.02 0.00 0.00 2.01 0.00 \ 0.00 91.46 Average: 1 5.17 0.00 3.58 0.30 0.00 0.90 0.00 \ 0.00 90.05
お使いのシステムにおいて特定のタスクの負荷を確認したい場合は、 pidstat コマンドを使用します。選択したそれぞれの タスクについて処理状況を表示するか、タスクを何も指定しない場合は Linux カーネルが管理する全タスクの処理状況を表示します。 レポート数を指定することができるほか、それらの時間間隔を指定することも できます。
たとえば pidstat -C
top 2 3 の
ように入力すると、コマンド名に 「top」 を含むタスクの
負荷状況を表示します。 2 秒間隔で計 3 回のレポートが作成されます。
tux@mercury:~> pidstat -C top 2 3 Linux 2.6.27.19-5-default (geeko@buildhost) 03/23/2009 _x86_64_ 09:25:42 AM PID %usr %system %guest %CPU CPU Command 09:25:44 AM 23576 37.62 61.39 0.00 99.01 1 top 09:25:44 AM PID %usr %system %guest %CPU CPU Command 09:25:46 AM 23576 37.00 62.00 0.00 99.00 1 top 09:25:46 AM PID %usr %system %guest %CPU CPU Command 09:25:48 AM 23576 38.00 61.00 0.00 99.00 1 top Average: PID %usr %system %guest %CPU CPU Command Average: 23576 37.54 61.46 0.00 99.00 - top
Linux カーネルでは、特定のメッセージをリングバッファ内に保存しています。 これらのメッセージを表示するには、 dmesg コマンドを ご利用ください:
tux@mercury:~> dmesg [...] end_request: I/O error, dev fd0, sector 0 subfs: unsuccessful attempt to mount media (256) e100: eth0: e100_watchdog: link up, 100Mbps, half-duplex NET: Registered protocol family 17 IA-32 Microcode Update Driver: v1.14 <tigran@veritas.com> microcode: CPU0 updated from revision 0xe to 0x2e, date = 08112004 IA-32 Microcode Update Driver v1.14 unregistered bootsplash: status on console 0 changed to on NET: Registered protocol family 10 Disabled Privacy Extensions on device c0326ea0(lo) IPv6 over IPv4 tunneling driver powernow: This module only works with AMD K7 CPUs bootsplash: status on console 0 changed to on
さらに古いイベントについては、
/var/log/messages
や
/var/log/warn
ファイルに保存されます。
指定したプロセス ID (PID
) で開いている
全ファイルを一覧表示するには、 -p
オプションを
指定します。たとえば、現在のシェルが開いている全てのファイルを確認する
には、下記のように入力します:
tux@mercury:~> lsof -p $$ COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 5552 tux cwd DIR 3,3 1512 117619 /home/tux bash 5552 tux rtd DIR 3,3 584 2 / bash 5552 tux txt REG 3,3 498816 13047 /bin/bash bash 5552 tux mem REG 0,0 0 [heap] (stat: No such bash 5552 tux mem REG 3,3 217016 115687 /var/run/nscd/passwd bash 5552 tux mem REG 3,3 208464 11867 /usr/lib/locale/en_GB. [...] bash 5552 tux mem REG 3,3 366 9720 /usr/lib/locale/en_GB. bash 5552 tux mem REG 3,3 97165 8828 /lib/ld-2.3.6.so bash 5552 tux 0u CHR 136,5 7 /dev/pts/5 bash 5552 tux 1u CHR 136,5 7 /dev/pts/5 bash 5552 tux 2u CHR 136,5 7 /dev/pts/5 bash 5552 tux 255u CHR 136,5 7 /dev/pts/5
ここで $$
は特別なシェル変数で、シェル自身の
プロセス ID に置き換えられて実行されます。
また lsof に何もオプションを指定しないで実行すると、 現在開かれている全てのファイルを一覧表示します。開かれている全ての ファイルを合計すると多数のファイルになってしまうため、全ファイルを 表示してもあまり便利ではありません。その代わりに、検索機能を組み合わせる ことで、使いやすい一覧にするのがお勧めです。たとえばキャラクタデバイスの 一覧を表示するには、下記のように入力します:
tux@mercury:~> lsof | grep CHR bash 3838 tux 0u CHR 136,0 2 /dev/pts/0 bash 3838 tux 1u CHR 136,0 2 /dev/pts/0 bash 3838 tux 2u CHR 136,0 2 /dev/pts/0 bash 3838 tux 255u CHR 136,0 2 /dev/pts/0 bash 5552 tux 0u CHR 136,5 7 /dev/pts/5 bash 5552 tux 1u CHR 136,5 7 /dev/pts/5 bash 5552 tux 2u CHR 136,5 7 /dev/pts/5 bash 5552 tux 255u CHR 136,5 7 /dev/pts/5 X 5646 root mem CHR 1,1 1006 /dev/mem lsof 5673 tux 0u CHR 136,5 7 /dev/pts/5 lsof 5673 tux 2u CHR 136,5 7 /dev/pts/5 grep 5674 tux 1u CHR 136,5 7 /dev/pts/5 grep 5674 tux 2u CHR 136,5 7 /dev/pts/5
-i
オプションを指定すると、 lsof は
インターネットファイルについても表示するようになります:
tux@mercury:~> lsof -i [...] pidgin 4349 tux 17r IPv4 15194 0t0 TCP \ jupiter.example.com:58542->www.example.net:https (ESTABLISHED) pidgin 4349 tux 21u IPv4 15583 0t0 TCP \ jupiter.example.com:37051->aol.example.org:aol (ESTABLISHED) evolution 4578 tux 38u IPv4 16102 0t0 TCP \ jupiter.example.com:57419->imap.example.com:imaps (ESTABLISHED) npviewer. 9425 tux 40u IPv4 24769 0t0 TCP \ jupiter.example.com:51416->www.example.com:http (CLOSE_WAIT) npviewer. 9425 tux 49u IPv4 24814 0t0 TCP \ jupiter.example.com:43964->www.example.org:http (CLOSE_WAIT) ssh 17394 tux 3u IPv4 40654 0t0 TCP \ jupiter.example.com:35454->saturn.example.com:ssh (ESTABLISHED)
udevadm monitor コマンドは、 udev のルールが発信した カーネルイベントと uevent を確認し、コンソールに対してそのイベントの デバイスパス (DEVPATH) を表示します。下記は USB メモリスティックを接続 した場合のイベント例です:
udev イベントの監視 | |
---|---|
root ユーザだけが udevadm コマンドを利用して udev イベントを監視することができます。 |
UEVENT[1138806687] add@/devices/pci0000:00/0000:00:1d.7/usb4/4-2/4-2.2 UEVENT[1138806687] add@/devices/pci0000:00/0000:00:1d.7/usb4/4-2/4-2.2/4-2.2 UEVENT[1138806687] add@/class/scsi_host/host4 UEVENT[1138806687] add@/class/usb_device/usbdev4.10 UDEV [1138806687] add@/devices/pci0000:00/0000:00:1d.7/usb4/4-2/4-2.2 UDEV [1138806687] add@/devices/pci0000:00/0000:00:1d.7/usb4/4-2/4-2.2/4-2.2 UDEV [1138806687] add@/class/scsi_host/host4 UDEV [1138806687] add@/class/usb_device/usbdev4.10 UEVENT[1138806692] add@/devices/pci0000:00/0000:00:1d.7/usb4/4-2/4-2.2/4-2.2 UEVENT[1138806692] add@/block/sdb UEVENT[1138806692] add@/class/scsi_generic/sg1 UEVENT[1138806692] add@/class/scsi_device/4:0:0:0 UDEV [1138806693] add@/devices/pci0000:00/0000:00:1d.7/usb4/4-2/4-2.2/4-2.2 UDEV [1138806693] add@/class/scsi_generic/sg1 UDEV [1138806693] add@/class/scsi_device/4:0:0:0 UDEV [1138806693] add@/block/sdb UEVENT[1138806694] add@/block/sdb/sdb1 UDEV [1138806694] add@/block/sdb/sdb1 UEVENT[1138806694] mount@/block/sdb/sdb1 UEVENT[1138806697] umount@/block/sdb/sdb1
Linux の監査フレームワークは複雑な監査システムで、全てのセキュリティ関連イベントを 収集します。これらの記録はその後セキュリティポリシーの違反が発生していないかどうか を調査するために分析が行なわれます。
xrestop は、それぞれの接続済み X11 クライアントに ついて、サーバ側で消費されている資源情報を表示します。出力は 2.3.4項 「プロセス表: top」 とよく似た形になっています。
xrestop - Display: localhost:0 Monitoring 40 clients. XErrors: 0 Pixmaps: 42013K total, Other: 206K total, All: 42219K total res-base Wins GCs Fnts Pxms Misc Pxm mem Other Total PID Identifier 3e00000 385 36 1 751 107 18161K 13K 18175K ? NOVELL: SU 4600000 391 122 1 1182 889 4566K 33K 4600K ? amaroK - S 1600000 35 11 0 76 142 3811K 4K 3816K ? KDE Deskto 3400000 52 31 1 69 74 2816K 4K 2820K ? Linux Shel 2c00000 50 25 1 43 50 2374K 3K 2378K ? Linux Shel 2e00000 50 10 1 36 42 2341K 3K 2344K ? Linux Shel 2600000 37 24 1 34 50 1772K 3K 1775K ? Root - Kon 4800000 37 24 1 34 49 1772K 3K 1775K ? Root - Kon 2a00000 209 33 1 323 238 1111K 12K 1123K ? Trekstor25 1800000 182 32 1 302 285 1039K 12K 1052K ? kicker 1400000 157 121 1 231 477 777K 18K 796K ? kwin 3c00000 175 36 1 248 168 510K 9K 520K ? de.comp.la 3a00000 326 42 1 579 444 486K 20K 506K ? [opensuse- 0a00000 85 38 1 317 224 102K 9K 111K ? Kopete 4e00000 25 17 1 60 66 63K 3K 66K ? YaST Contr 2400000 11 10 0 56 51 53K 1K 55K 22061 suseplugge 0e00000 20 12 1 50 92 50K 3K 54K 22016 kded 3200000 6 41 5 72 84 40K 8K 48K ? EMACS 2200000 54 9 1 30 31 42K 3K 45K ? SUSEWatche 4400000 2 11 1 30 34 34K 2K 36K 16489 kdesu 1a00000 255 7 0 42 11 19K 6K 26K ? KMix 3800000 2 14 1 34 37 21K 2K 24K 22242 knotify 1e00000 10 7 0 42 9 15K 624B 15K ? KPowersave 3600000 106 6 1 30 9 7K 3K 11K 22236 konqueror 2000000 10 5 0 21 34 9K 1K 10K ? klipper +3000000 21 7 0 11 9 7K 888B 8K ? KDE Wallet
ipcs プログラムは、現在使用中の IPC (プロセス間通信) を表示することができます:
------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x00000000 58261504 tux 600 393216 2 dest 0x00000000 58294273 tux 600 196608 2 dest 0x00000000 83886083 tux 666 43264 2 0x00000000 83951622 tux 666 192000 2 0x00000000 83984391 tux 666 282464 2 0x00000000 84738056 root 644 151552 2 dest ------ Semaphore Arrays -------- key semid owner perms nsems 0x4d038abf 0 tux 600 8 ------ Message Queues -------- key msqid owner perms used-bytes messages
ps コマンドは、プロセスの一覧を表示することができます。 ほとんどのパラメータはマイナス記号なしで書くことができます。簡潔な ヘルプを読む場合は ps --help と入力し、より詳しいヘルプを 読む場合はマニュアルページをお読みください。
また、全てのプロセスについてユーザとコマンドライン情報を表示するには、 ps axu と入力します:
tux@mercury:~> ps axu USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 696 272 ? S 12:59 0:01 init [5] root 2 0.0 0.0 0 0 ? SN 12:59 0:00 [ksoftirqd root 3 0.0 0.0 0 0 ? S< 12:59 0:00 [events [...] tux 4047 0.0 6.0 158548 31400 ? Ssl 13:02 0:06 mono-best tux 4057 0.0 0.7 9036 3684 ? Sl 13:02 0:00 /opt/gnome tux 4067 0.0 0.1 2204 636 ? S 13:02 0:00 /opt/gnome tux 4072 0.0 1.0 15996 5160 ? Ss 13:02 0:00 gnome-scre tux 4114 0.0 3.7 130988 19172 ? SLl 13:06 0:04 sound-juic tux 4818 0.0 0.3 4192 1812 pts/0 Ss 15:59 0:00 -bash tux 4959 0.0 0.1 2324 816 pts/0 R+ 16:17 0:00 ps axu
たとえば sshd プロセスがいくつ動作しているのかを
調べるには、 -p
オプションと pidof
コマンドを併用してください。 pidof コマンドは、
指定された名前のコマンドを実行しているプロセス ID を、一覧表示する
コマンドです。
tux@mercury:~> ps -p $(pidof sshd) PID TTY STAT TIME COMMAND 3524 ? Ss 0:00 /usr/sbin/sshd -o PidFile=/var/run/sshd.init.pid 4813 ? Ss 0:00 sshd: tux [priv] 4817 ? R 0:00 sshd: tux@pts/0
プロセス一覧の書式は必要に応じて変更することができます。 -L
オプションを指定して実行すると、書式に関する全てのキーワードを出力する
ことができます。たとえば下記のコマンドでは、全てのプロセスをメモリの
使用率順に並べて表示します:
tux@mercury:~> ps ax --format pid,rss,cmd --sort rss PID RSS CMD 2 0 [ksoftirqd/0] 3 0 [events/0] 4 0 [khelper] 5 0 [kthread] 11 0 [kblockd/0] 12 0 [kacpid] 472 0 [pdflush] 473 0 [pdflush] [...] 4028 17556 nautilus --no-default-window --sm-client-id default2 4118 17800 ksnapshot 4114 19172 sound-juicer 4023 25144 gnome-panel --sm-client-id default1
便利な ps 呼び出し
--sort 列
列
の出力順に並べ替えます。それぞれ
列
には下記を指定できます。
物理メモリの比率: pmem |
CPU の使用率: pcpu |
常駐セットサイズ (スワップしていない物理メモリ): rss |
各プロセスについて PID と CPU の使用率、メモリサイズ (常駐および仮想) と名前、 およびシステムコール名を表示します。
プロセスツリー (木構造) を表示します。
pstree コマンドは、プロセスの一覧をツリー (木) 構造 で表示します:
tux@mercury:~> pstree init-+-NetworkManagerD |-acpid |-3*[automount] |-cron |-cupsd |-2*[dbus-daemon] |-dbus-launch |-dcopserver |-dhcpcd |-events/0 |-gpg-agent |-hald-+-hald-addon-acpi | `-hald-addon-stor |-kded |-kdeinit-+-kdesu---su---kdesu_stub---yast2---y2controlcenter | |-kio_file | |-klauncher | |-konqueror | |-konsole-+-bash---su---bash | | `-bash | `-kwin |-kdesktop---kdesktop_lock---xmatrix |-kdesud |-kdm-+-X | `-kdm---startkde---kwrapper [...]
-p
オプションを指定すると、それぞれの名前の後ろに
プロセス ID を表示することができます。コマンドラインについても表示する
には、 -a
を指定してください。
top コマンドは "table of processes" (プロセス表) の
略で、 2 秒おきに更新するタイプのプロセス一覧を表示します。プログラムを
終了するには、 Q を押してください。また、
-n 1
パラメータを指定すると、プロセス一覧を一度表示
するだけでプログラムが終了するようになります。下記は、
top -n 1 の出力例です:
tux@mercury:~> top -n 1 top - 17:06:28 up 2:10, 5 users, load average: 0.00, 0.00, 0.00 Tasks: 85 total, 1 running, 83 sleeping, 1 stopped, 0 zombie Cpu(s): 5.5% us, 0.8% sy, 0.8% ni, 91.9% id, 1.0% wa, 0.0% hi, 0.0% si Mem: 515584k total, 506468k used, 9116k free, 66324k buffers Swap: 658656k total, 0k used, 658656k free, 353328k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 16 0 700 272 236 S 0.0 0.1 0:01.33 init 2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0 3 root 10 -5 0 0 0 S 0.0 0.0 0:00.27 events/0 4 root 10 -5 0 0 0 S 0.0 0.0 0:00.01 khelper 5 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 kthread 11 root 10 -5 0 0 0 S 0.0 0.0 0:00.05 kblockd/0 12 root 20 -5 0 0 0 S 0.0 0.0 0:00.00 kacpid 472 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pdflush 473 root 15 0 0 0 0 S 0.0 0.0 0:00.06 pdflush 475 root 11 -5 0 0 0 S 0.0 0.0 0:00.00 aio/0 474 root 15 0 0 0 0 S 0.0 0.0 0:00.07 kswapd0 681 root 10 -5 0 0 0 S 0.0 0.0 0:00.01 kseriod 839 root 10 -5 0 0 0 S 0.0 0.0 0:00.02 reiserfs/0 923 root 13 -4 1712 552 344 S 0.0 0.1 0:00.67 udevd 1343 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 khubd 1587 root 20 0 0 0 0 S 0.0 0.0 0:00.00 shpchpd_event 1746 root 15 0 0 0 0 S 0.0 0.0 0:00.00 w1_control 1752 root 15 0 0 0 0 S 0.0 0.0 0:00.00 w1_bus_master1 2151 root 16 0 1464 496 416 S 0.0 0.1 0:00.00 acpid 2165 messageb 16 0 3340 1048 792 S 0.0 0.2 0:00.64 dbus-daemon 2166 root 15 0 1840 752 556 S 0.0 0.1 0:00.01 syslog-ng 2171 root 16 0 1600 516 320 S 0.0 0.1 0:00.00 klogd 2235 root 15 0 1736 800 652 S 0.0 0.2 0:00.10 resmgrd 2289 root 16 0 4192 2852 1444 S 0.0 0.6 0:02.05 hald 2403 root 23 0 1756 600 524 S 0.0 0.1 0:00.00 hald-addon-acpi 2709 root 19 0 2668 1076 944 S 0.0 0.2 0:00.00 NetworkManagerD 2714 root 16 0 1756 648 564 S 0.0 0.1 0:00.56 hald-addon-stor
既定では CPU の使用率順 (Shift+P) に並べられています。それぞれ下記のショートカットで並び順を変更することが できます:
の列、ショートカットではShift+M: 常駐メモリ ( ) |
Shift+N: プロセス ID ( ) |
Shift+T: CPU 時間 ( ) |
それ以外の項目を並べ替えに使用するには、 F を押して一覧から 項目を選択します。並べ替え順序 (昇順、降順) を切り替えるには、 Shift+R を押します。
また、 -U
オプションを
指定すると、特定のユーザのプロセスだけを監視するようになります。ここで、
UID
UID
にはユーザのユーザ ID を指定してください。
たとえば、 top -U $(id -u) のように入力すると、
自分自身が起動したプロセスについて一覧表示を行ないます。
iotop ユーティリティは、プロセスやスレッドごとに I/O 使用率を表形式で表示することができるユーティリティです。
iotop は既定ではインストールされません。
|
iotop は指定された採取間隔の間に発生した I/O について、 その読み込みと書き込み帯域をプロセスごとに列で表示します。また、各プロセス がスワップへの書き込み処理に費やした時間の割合や、 I/O の完了を待機して いた時間の割合を表示することもできます。それ以外にも、それぞれの I/O 優先順位 (分類/レベル) も表示されます。さらに、採取間隔の間に発生した 読み込みと書き込みの I/O 帯域の合計値も、インターフェイスの冒頭部に 表示します。
並び順を変えるには、それぞれ左右のカーソルキーを使用します。また
R では並び順を逆順に、 O は
--only
オプションの切り替えを、 P
は --processes
オプションの切り替えをそれぞれ行ないます。
さらに A は --accumulated
オプションの
切り替えを、 Q はプログラムの終了を行なうことができます。
また、 I はスレッドやプロセスの優先順位を変更する
ことができます。それ以外のキーは全て更新を行なうためのキーです。
下記は iotop --only の出力例です。 find と emacs が動作中である 状況が見えています:
tux@mercury:~> iotop --only Total DISK READ: 50.61 K/s | Total DISK WRITE: 11.68 K/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 3416 be/4 ke 50.61 K/s 0.00 B/s 0.00 % 4.05 % find / 275 be/3 root 0.00 B/s 3.89 K/s 0.00 % 2.34 % [jbd2/sda2-8] 5055 be/4 ke 0.00 B/s 3.89 K/s 0.00 % 0.04 % emacs
iotop はバッチモード (-b
) を
使用することができるほか、ファイルに出力して後から分析を行なうことも
できます。オプションの一覧について、詳しくはマニュアルページ
(man 1 iotop) をお読みください。
カーネルは各プロセスの優先レベル (nice 値とも呼びます) をもとにして、
どのプロセスに対してより多くの CPU 時間を与えるかを決定します。
あるプロセスに対してより大きい 「nice」 値が設定されている
場合、プロセスに与えられる CPU 時間は少なくなります。 nice 値は
-20 (最優先) から 19 までの間で設定します。マイナスの値は
root
だけが設定できます。
nice 値のレベルを調整すると、処理時間が長くかかるだけでなく CPU 時間も 大きく消費し、時間面の制約が少ないプログラム、たとえばカーネルの コンパイル作業を動作させるような場合に効果があります。それらのプロセスの 「nice 値を大きくする」 ことで、 Web サーバなどの他の処理を 優先的に動作させることができます。
また、オプションを何も指定せずに nice を実行すると、 現在の nice 値を表示することができます:
tux@mercury:~> nice 0
nice コマンド
のように
実行すると、指定したコマンドの nice 値を 10 だけプラスします。また、
nice -n
レベル
コマンド
のように実行すると、
現在の nice 値に対する相対値で指定することができます。
実行中のプロセスに対する nice 値を変更するには、 renice
優先度
-p
のように実行します。たとえば:
プロセス
id
renice +5 3266
指定したユーザの全プロセスに対する nice 値を変更するには、
-u
オプションを
ご利用ください。また、プロセスグループを指定する場合は、
ユーザ
-g
のように指定します。
プロセスグループ ID
free ユーティリティは、メモリの使用率を表示する ことができます。空き容量の詳細や使用済み容量の詳細、スワップ領域の 詳細がそれぞれ表示されます:
tux@mercury:~> free total used free shared buffers cached Mem: 2062844 2047444 15400 0 129580 921936 -/+ buffers/cache: 995928 1066916 Swap: 2104472 0 2104472
それぞれ -b
,-k
,-m
,
-g
オプションを指定すると、バイト単位/キロバイト単位/
メガバイト単位/ギガバイト単位に値を表示するようになります。
また、 -d 時間
オプションを指定すると、
時間
で指定した秒間隔ごとに表示が更新される
ようになります。たとえば free -d 1.5 と入力すると、
1.5 秒間隔で更新が行なわれます。
/proc/meminfo
¶
/proc/meminfo
を利用することで、 free
が表示するデータよりもさらに詳細な情報を得ることができます。実際のところ、
free はここからの出力を利用しています。下記に 64 ビット
システムでの表示例を示します。 32 ビットシステムの場合、メモリの管理形態が
異なる都合上、出力項目が若干異なることに注意してください:
tux@mercury:~> cat /proc/meminfo MemTotal: 8182956 kB MemFree: 1045744 kB Buffers: 364364 kB Cached: 5601388 kB SwapCached: 1936 kB Active: 4048268 kB Inactive: 2674796 kB Active(anon): 663088 kB Inactive(anon): 107108 kB Active(file): 3385180 kB Inactive(file): 2567688 kB Unevictable: 4 kB Mlocked: 4 kB SwapTotal: 2096440 kB SwapFree: 2076692 kB Dirty: 44 kB Writeback: 0 kB AnonPages: 756108 kB Mapped: 147320 kB Slab: 329216 kB SReclaimable: 300220 kB SUnreclaim: 28996 kB PageTables: 21092 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 6187916 kB Committed_AS: 1388160 kB VmallocTotal: 34359738367 kB VmallocUsed: 133384 kB VmallocChunk: 34359570939 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 2689024 kB DirectMap2M: 5691392 kB
最も重要な項目は下記のとおりです:
利用可能な RAM の合計値
未使用の RAM の合計値
RAM 内のファイルバッファキャッシュ
RAM 内のページキャッシュ (バッファキャッシュを除く)
スワップ内のページキャッシュ
通常は再利用のできない、直近で使用されたメモリ。この値は匿名ページ (
として一覧表示されるもの) によって 要求されたメモリと、ファイルバックのページ ( ) の合計値を示しています。再利用の可能な、直近では使用されていないメモリ。この値は匿名ページ (
として一覧表示されるもの) によって 要求されたメモリと、ファイルバックページ ( ) の合計値を示しています。スワップ領域の合計サイズ
未使用のスワップ領域の合計サイズ
ディスクに書き込まれる予定のメモリ量
現在ディスクに書き込んでいる最中のメモリ量
nmap コマンドで割り当てられたメモリ
カーネルのデータ構造キャッシュ
再利用可能な SLAB キャッシュ (inode, dentry など)
現在の負荷量を処理するにあたって必要なメモリ量 (RAM とスワップ) の 合計値の見積もり
特定のプロセスがどれだけメモリを利用しているのかを正確に知るには、
top や ps のような標準ツールでは
判断できません。このような要件には、カーネル 2.6.14 から提供されるようになった
smaps サブシステムをお使いください。 smaps サブシステムは
/proc/
からアクセスできます。なお プロセス ID
/smapsプロセス ID
は
実際のプロセス ID に置き換えてください。このサブシステムは共有メモリと
プライベートメモリを区別して表示するため、他のプロセスと共有されておらず
独占的に使用されているメモリ量を判断することができます。
netstat はネットワーク接続を表示することができるほか、
ルーティングテーブル (-r
), インターフェイス
(-i
), マスカレード接続 (-M
),
マルチキャストのメンバーシップ情報 (-g
),
統計情報 (-s
) をそれぞれ表示することができます。
tux@mercury:~> netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 192.168.2.0 * 255.255.254.0 U 0 0 0 eth0 link-local * 255.255.0.0 U 0 0 0 eth0 loopback * 255.0.0.0 U 0 0 0 lo default 192.168.2.254 0.0.0.0 UG 0 0 0 eth0
tux@mercury:~> netstat -i Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth0 1500 0 1624507 129056 0 0 7055 0 0 0 BMNRU lo 16436 0 23728 0 0 0 23728 0 0 0 LRU
ネットワーク接続や統計情報を表示する際、表示するソケットタイプを指定する
ことができます。それぞれ TCP (-t
), UDP (-u
),
raw (-r
) を指定してください。また、 -p
を指定すると、各ソケットの属している PID とプログラム名を表示します。
下記の例では、全ての TCP 接続とそれらの接続を使用しているプログラムを 表示しています:
mercury:~ # netstat -t -p Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Pro [...] tcp 0 0 mercury:33513 www.novell.com:www-http ESTABLISHED 6862/fi tcp 0 352 mercury:ssh mercury2.:trc-netpoll ESTABLISHED 19422/s tcp 0 0 localhost:ssh localhost:17828 ESTABLISHED -
下記の例では、 TCP プロトコルの統計情報を表示しています:
tux@mercury:~> netstat -s -t Tcp: 2427 active connections openings 2374 passive connection openings 0 failed connection attempts 0 connection resets received 1 connections established 27476 segments received 26786 segments send out 54 segments retransmited 0 bad segments received. 6 resets sent [...] TCPAbortOnLinger: 0 TCPAbortFailed: 0 TCPMemoryPressures: 0
iptraf はメニューベースのローカルエリアネットワーク (LAN) モニタです。 TCP, UDP のカウントやイーサネットの負荷情報、 IP チェックサムエラーなどのネットワーク統計情報を生成します。
iptraf は既定ではインストールされません。インストール
を行なうには、 |
何もオプションを指定せずに実行した場合は、対話モードで動作します。 グラフィカルなメニューを利用することができるほか、 iptraf で収集したい統計情報を選択することができます。ネットワークインターフェイスを 指定することもできます。
また、 iptraf コマンドには複数のオプションがあり、
バッチモードでも動作させることができます。下記の例では、ネットワーク
インターフェイス eth0 (-i
) の統計情報を 1 分間収集する
動作をします。さらに、本プログラムはバックグラウンド (-B
)
で動作させることもできます。この場合、統計情報はお使いのホームディレクトリ
内にある iptraf.log
ファイルに出力されます
(-L
) 。
tux@mercury:~> iptraf -i eth0 -t 1 -B -L ~/iptraf.log
生成されたログファイルは、 more コマンドで閲覧できます:
tux@mercury:~> more ~/iptraf.log Mon Mar 23 10:08:02 2010; ******** IP traffic monitor started ******** Mon Mar 23 10:08:02 2010; UDP; eth0; 107 bytes; from 192.168.1.192:33157 to \ 239.255.255.253:427 Mon Mar 23 10:08:02 2010; VRRP; eth0; 46 bytes; from 192.168.1.252 to \ 224.0.0.18 Mon Mar 23 10:08:03 2010; VRRP; eth0; 46 bytes; from 192.168.1.252 to \ 224.0.0.18 Mon Mar 23 10:08:03 2010; VRRP; eth0; 46 bytes; from 192.168.1.252 to \ 224.0.0.18 [...] Mon Mar 23 10:08:06 2010; UDP; eth0; 132 bytes; from 192.168.1.54:54395 to \ 10.20.7.255:111 Mon Mar 23 10:08:06 2010; UDP; eth0; 46 bytes; from 192.168.1.92:27258 to \ 10.20.7.255:8765 Mon Mar 23 10:08:06 2010; UDP; eth0; 124 bytes; from 192.168.1.139:43464 to \ 10.20.7.255:111 Mon Mar 23 10:08:06 2010; VRRP; eth0; 46 bytes; from 192.168.1.252 to \ 224.0.0.18 --More--(7%)
/proc
ファイルシステム¶
/proc
ファイルシステムはカーネルが提供する擬似的な
ファイルシステムで、ファイルの形式で各種の重要情報を提供します。
たとえば下記のコマンドを入力すると、 CPU の種類を表示することができます:
tux@mercury:~> cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 15 model : 4 model name : Intel(R) Pentium(R) 4 CPU 3.40GHz stepping : 3 cpu MHz : 2800.000 cache size : 2048 KB physical id : 0 [...]
また、割り込みの割り当てや使用について調べるには、 下記のようなコマンドを入力します:
tux@mercury:~> cat /proc/interrupts CPU0 0: 3577519 XT-PIC timer 1: 130 XT-PIC i8042 2: 0 XT-PIC cascade 5: 564535 XT-PIC Intel 82801DB-ICH4 7: 1 XT-PIC parport0 8: 2 XT-PIC rtc 9: 1 XT-PIC acpi, uhci_hcd:usb1, ehci_hcd:usb4 10: 0 XT-PIC uhci_hcd:usb3 11: 71772 XT-PIC uhci_hcd:usb2, eth0 12: 101150 XT-PIC i8042 14: 33146 XT-PIC ide0 15: 149202 XT-PIC ide1 NMI: 0 LOC: 0 ERR: 0 MIS: 0
下記に /proc 以下にある重要なファイルと、その内容説明を記します:
/proc/devices
利用可能なデバイスの一覧
/proc/modules
読み込まれたカーネルモジュール
/proc/cmdline
カーネルのコマンドラインパラメータ
/proc/meminfo
メモリの使用率に関する詳細情報
/proc/config.gz
現在実行中のカーネルについて、そのカーネル設定ファイルを gzip 圧縮したもの
さらなる情報は、
/usr/src/linux/Documentation/filesystems/proc.txt
のテキストファイル内に書かれています (なお、このファイルは
kernel-source
パッケージをインストールした
場合にのみ利用できます) 。また、現在実行中のプロセスに関する情報は、
/proc/
NNN
ディレクトリ
以下から読み取ることができます。ここで NNN
にはプロセス ID (PID) を指定します。自分自身のプロセスについて調べる
場合は、 /proc/self/
を利用して調べることができます:
tux@mercury:~> ls -l /proc/self lrwxrwxrwx 1 root root 64 2007-07-16 13:03 /proc/self -> 5356 tux@mercury:~> ls -l /proc/self/ total 0 dr-xr-xr-x 2 tux users 0 2007-07-16 17:04 attr -r-------- 1 tux users 0 2007-07-16 17:04 auxv -r--r--r-- 1 tux users 0 2007-07-16 17:04 cmdline lrwxrwxrwx 1 tux users 0 2007-07-16 17:04 cwd -> /home/tux -r-------- 1 tux users 0 2007-07-16 17:04 environ lrwxrwxrwx 1 tux users 0 2007-07-16 17:04 exe -> /bin/ls dr-x------ 2 tux users 0 2007-07-16 17:04 fd -rw-r--r-- 1 tux users 0 2007-07-16 17:04 loginuid -r--r--r-- 1 tux users 0 2007-07-16 17:04 maps -rw------- 1 tux users 0 2007-07-16 17:04 mem -r--r--r-- 1 tux users 0 2007-07-16 17:04 mounts -rw-r--r-- 1 tux users 0 2007-07-16 17:04 oom_adj -r--r--r-- 1 tux users 0 2007-07-16 17:04 oom_score lrwxrwxrwx 1 tux users 0 2007-07-16 17:04 root -> / -rw------- 1 tux users 0 2007-07-16 17:04 seccomp -r--r--r-- 1 tux users 0 2007-07-16 17:04 smaps -r--r--r-- 1 tux users 0 2007-07-16 17:04 stat [...] dr-xr-xr-x 3 tux users 0 2007-07-16 17:04 task -r--r--r-- 1 tux users 0 2007-07-16 17:04 wchan
実行ファイルとライブラリのアドレス割り当ては、 maps
ファイル内に書かれています:
tux@mercury:~> cat /proc/self/maps 08048000-0804c000 r-xp 00000000 03:03 17753 /bin/cat 0804c000-0804d000 rw-p 00004000 03:03 17753 /bin/cat 0804d000-0806e000 rw-p 0804d000 00:00 0 [heap] b7d27000-b7d5a000 r--p 00000000 03:03 11867 /usr/lib/locale/en_GB.utf8/ b7d5a000-b7e32000 r--p 00000000 03:03 11868 /usr/lib/locale/en_GB.utf8/ b7e32000-b7e33000 rw-p b7e32000 00:00 0 b7e33000-b7f45000 r-xp 00000000 03:03 8837 /lib/libc-2.3.6.so b7f45000-b7f46000 r--p 00112000 03:03 8837 /lib/libc-2.3.6.so b7f46000-b7f48000 rw-p 00113000 03:03 8837 /lib/libc-2.3.6.so b7f48000-b7f4c000 rw-p b7f48000 00:00 0 b7f52000-b7f53000 r--p 00000000 03:03 11842 /usr/lib/locale/en_GB.utf8/ [...] b7f5b000-b7f61000 r--s 00000000 03:03 9109 /usr/lib/gconv/gconv-module b7f61000-b7f62000 r--p 00000000 03:03 9720 /usr/lib/locale/en_GB.utf8/ b7f62000-b7f76000 r-xp 00000000 03:03 8828 /lib/ld-2.3.6.so b7f76000-b7f78000 rw-p 00013000 03:03 8828 /lib/ld-2.3.6.so bfd61000-bfd76000 rw-p bfd61000 00:00 0 [stack] ffffe000-fffff000 ---p 00000000 00:00 0 [vdso]
/proc
ファイルシステムにある重要な情報は、
procinfo コマンドを利用することで概要表示を
行なうことができます:
tux@mercury:~> procinfo Linux 2.6.32.7-0.2-default (geeko@buildhost) (gcc 4.3.4) #1 2CPU Memory: Total Used Free Shared Buffers Mem: 2060604 2011264 49340 0 200664 Swap: 2104472 112 2104360 Bootup: Wed Feb 17 03:39:33 2010 Load average: 0.86 1.10 1.11 3/118 21547 user : 2:43:13.78 0.8% page in : 71099181 disk 1: 2827023r 968 nice : 1d 22:21:27.87 14.7% page out: 690734737 system: 13:39:57.57 4.3% page act: 138388345 IOwait: 18:02:18.59 5.7% page dea: 29639529 hw irq: 0:03:39.44 0.0% page flt: 9539791626 sw irq: 1:15:35.25 0.4% swap in : 69 idle : 9d 16:07:56.79 73.8% swap out: 209 uptime: 6d 13:07:11.14 context : 542720687 irq 0: 141399308 timer irq 14: 5074312 ide0 irq 1: 73784 i8042 irq 50: 1938076 uhci_hcd:usb1, ehci_ irq 4: 2 irq 58: 0 uhci_hcd:usb2 irq 6: 5 floppy [2] irq 66: 872711 uhci_hcd:usb3, HDA I irq 7: 2 irq 74: 15 uhci_hcd:usb4 irq 8: 0 rtc irq 82: 178717720 0 PCI-MSI e irq 9: 0 acpi irq169: 44352794 nvidia irq 12: 3 irq233: 8209068 0 PCI-MSI l
全ての情報を表示するには、 -a
オプションを指定してください。
-nN
オプションを指定すると、 N
秒おきに情報を更新するようになります。この場合は、 q
を押すとプログラムを終了することができます。
既定では累積値を表示するようになっていますが、 -d
を指定
すると差を表示するようになります。たとえば procinfo
-dn5 と入力すると、最近 5 秒間に変更のあった値が表示されます。
PCI 設定へのアクセスについて | |
---|---|
コンピュータの PCI 設定にアクセスするには、多くのオペレーティングシステムで root のユーザ権限が必要です。 |
lspci コマンドは PCI 資源の一覧を表示します:
mercury:~ # lspci 00:00.0 Host bridge: Intel Corporation 82845G/GL[Brookdale-G]/GE/PE \ DRAM Controller/Host-Hub Interface (rev 01) 00:01.0 PCI bridge: Intel Corporation 82845G/GL[Brookdale-G]/GE/PE \ Host-to-AGP Bridge (rev 01) 00:1d.0 USB Controller: Intel Corporation 82801DB/DBL/DBM \ (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 (rev 01) 00:1d.1 USB Controller: Intel Corporation 82801DB/DBL/DBM \ (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2 (rev 01) 00:1d.2 USB Controller: Intel Corporation 82801DB/DBL/DBM \ (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3 (rev 01) 00:1d.7 USB Controller: Intel Corporation 82801DB/DBM \ (ICH4/ICH4-M) USB2 EHCI Controller (rev 01) 00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev 81) 00:1f.0 ISA bridge: Intel Corporation 82801DB/DBL (ICH4/ICH4-L) \ LPC Interface Bridge (rev 01) 00:1f.1 IDE interface: Intel Corporation 82801DB (ICH4) IDE \ Controller (rev 01) 00:1f.3 SMBus: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) \ SMBus Controller (rev 01) 00:1f.5 Multimedia audio controller: Intel Corporation 82801DB/DBL/DBM \ (ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller (rev 01) 01:00.0 VGA compatible controller: Matrox Graphics, Inc. G400/G450 (rev 85) 02:08.0 Ethernet controller: Intel Corporation 82801DB PRO/100 VE (LOM) \ Ethernet Controller (rev 81)
-v
オプションを使用すると、さらに詳細な一覧を表示する
ことができます:
mercury:~ # lspci -v [...] 00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet \ Controller (rev 02) Subsystem: Intel Corporation PRO/1000 MT Desktop Adapter Flags: bus master, 66MHz, medium devsel, latency 64, IRQ 19 Memory at f0000000 (32-bit, non-prefetchable) [size=128K] I/O ports at d010 [size=8] Capabilities: [dc] Power Management version 2 Capabilities: [e4] PCI-X non-bridge device Kernel driver in use: e1000 Kernel modules: e1000
デバイス名の解決は /usr/share/pci.ids
ファイルを利用して
行なわれます。このファイル内に対応する PCI ID とその名前が存在しない場合、
「Unknown device」 (未知のデバイス) として表示されます。
-vv
オプションを使用すると、プログラムで問い合わせ可能な
全ての情報を出力します。また、名前ではなく数値で表示させたい場合は、
-n
オプションを使用してください。
lsusb コマンドは全ての USB デバイスを一覧表示します。
-v
オプションを指定すると、さらに詳しい一覧が表示されます。
詳しい一覧は /proc/bus/usb/
ディレクトリから読み出す
仕組みになっています。下記は USB ハブ、 USB メモリ、ハードディスク、
マウスがそれぞれ USB 経由で接続されている場合の例です。
mercury:/ # lsusb Bus 004 Device 007: ID 0ea0:2168 Ours Technology, Inc. Transcend JetFlash \ 2.0 / Astone USB Drive Bus 004 Device 006: ID 04b4:6830 Cypress Semiconductor Corp. USB-2.0 IDE \ Adapter Bus 004 Device 005: ID 05e3:0605 Genesys Logic, Inc. Bus 004 Device 001: ID 0000:0000 Bus 003 Device 001: ID 0000:0000 Bus 002 Device 001: ID 0000:0000 Bus 001 Device 005: ID 046d:c012 Logitech, Inc. Optical Mouse Bus 001 Device 001: ID 0000:0000
file コマンドは、指定した単一または複数のファイルに
ついて、 /usr/share/misc/magic
から読み込んだ
データを元に種類を判別します。
tux@mercury:~> file /usr/bin/file /usr/bin/file: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), \ for GNU/Linux 2.6.4, dynamically linked (uses shared libs), stripped
-f
を指定すると、
種類を判別したいファイル名の一覧が書かれたファイルを指定することが
できます。また、 一覧
-z
を指定すると、 file
が圧縮ファイル内の判別を行なうようになります:
tux@mercury:~> file /usr/share/man/man1/file.1.gz /usr/share/man/man1/file.1.gz: gzip compressed data, from Unix, max compression tux@mercury:~> file -z /usr/share/man/man1/file.1.gz /usr/share/man/man1/file.1.gz: troff or preprocessor input text \ (gzip compressed data, from Unix, max compression)
また、 -i
を指定すると、従来の表記法ではなく MIME タイプ
の文字列を表示します。
tux@mercury:~> file -i /usr/share/misc/magic /usr/share/misc/magic: text/plain charset=utf-8
mount コマンドは、各マウントポイントにどのファイル システムがマウントされているかを表示します:
tux@mercury:~> mount /dev/sda2 on / type ext4 (rw,acl,user_xattr) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) debugfs on /sys/kernel/debug type debugfs (rw) devtmpfs on /dev type devtmpfs (rw,mode=0755) tmpfs on /dev/shm type tmpfs (rw,mode=1777) devpts on /dev/pts type devpts (rw,mode=0620,gid=5) /dev/sda3 on /home type ext3 (rw) securityfs on /sys/kernel/security type securityfs (rw) fusectl on /sys/fs/fuse/connections type fusectl (rw) gvfs-fuse-daemon on /home/tux/.gvfs type fuse.gvfs-fuse-daemon \ (rw,nosuid,nodev,user=tux)
ファイルシステム内での使用率に関する情報を得たい場合は、
df をお使いください。 -h
(または --human-readable
) オプションを指定すると、
一般的なユーザにとって、より読みやすい形式で表示することができます。
tux@mercury:~> df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 20G 5,9G 13G 32% / devtmpfs 1,6G 236K 1,6G 1% /dev tmpfs 1,6G 668K 1,6G 1% /dev/shm /dev/sda3 208G 40G 159G 20% /home
また、指定したディレクトリ内のファイルと、そのサブディレクトリ以下に
あるファイルについてサイズを確認するには、 du
を使用します。 -s
オプションを指定すると、詳細な情報
出力を省いて、パラメータで指定した各ディレクトリの合計サイズだけを
表示します。 こちらも -h
オプションを指定することが
でき、同じく一般的なユーザにとって読みやすい形式で表示することができます:
tux@mercury:~> du -sh /opt 192M /opt
バイナリファイルの内容を読みたい場合は、 readelf をお使いください。このコマンドでは、他のアーキテクチャ向けに作成された ELF 形式のファイルを読み取ることもできます:
tux@mercury:~> readelf --file-header /bin/ls ELF Header: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 Class: ELF64 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: Advanced Micro Devices X86-64 Version: 0x1 Entry point address: 0x402540 Start of program headers: 64 (bytes into file) Start of section headers: 95720 (bytes into file) Flags: 0x0 Size of this header: 64 (bytes) Size of program headers: 56 (bytes) Number of program headers: 9 Size of section headers: 64 (bytes) Number of section headers: 32 Section header string table index: 31
stat コマンドを利用すると、ファイルの属性を 表示することができます:
tux@mercury:~> stat /etc/profile File: `/etc/profile' Size: 9662 Blocks: 24 IO Block: 4096 regular file Device: 802h/2050d Inode: 132349 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2009-03-20 07:51:17.000000000 +0100 Modify: 2009-01-08 19:21:14.000000000 +0100 Change: 2009-03-18 12:55:31.000000000 +0100
--filesystem
オプションを指定すると、指定したファイルが
配置されているファイルシステムに関する属性情報を表示します:
tux@mercury:~> stat /etc/profile --file-system File: "/etc/profile" ID: d4fb76e70b4d1746 Namelen: 255 Type: ext2/ext3 Block size: 4096 Fundamental block size: 4096 Blocks: Total: 2581445 Free: 1717327 Available: 1586197 Inodes: Total: 655776 Free: 490312
どのプロセスやユーザが特定のファイルにアクセスしているのかを確認
できれば便利です。たとえば /mnt
にマウントされた
ファイルシステムのマウントを解除したい場合、 umount
コマンドが "device is busy." としてマウントを解除できないことがあります。
このような場合は、 fuser コマンドを利用して、
どのプロセスがデバイスを使用しているのかを確認することができます:
tux@mercury:~> fuser -v /mnt/* USER PID ACCESS COMMAND /mnt/notes.txt tux 26597 f.... less
上記の例では他の端末から less プロセスを終了させると、
ファイルシステムのマウント解除を行なうことができるようになります。
なお -k
オプションを指定すると、 fuser
は該当するファイルにアクセスしているプロセスに対し、プロセスの終了を
行なうようになります。
w コマンドを利用すると、システムに誰がログインして いるのかと、そのユーザが何をしているのかを表示することができます。 たとえば下記のようになります:
tux@mercury:~> w 14:58:43 up 1 day, 1:21, 2 users, load average: 0.00, 0.00, 0.00 USER TTY LOGIN@ IDLE JCPU PCPU WHAT tux :0 12:25 ?xdm? 1:23 0.12s /bin/sh /usr/bin/startkde root pts/4 14:13 0.00s 0.06s 0.00s w
他のシステムのユーザが遠隔 (リモート) からログインしている場合、
-f
オプションを指定すると、どのコンピュータから
ログインしているのかが表示されるようになります。
time ユーティリティを利用すると、指定したコマンドを 実行する際に消費された時間を表示することができます。このユーティリティは シェルの内蔵機能で提供されているほか、プログラム (/usr/bin/time) としても提供されています。
tux@mercury:~> time find . > /dev/null real 0m4.051s user 0m0.042s sys 0m0.205s
この世界には計測可能なデータが数多く存在しています。たとえば温度の変化や お使いのコンピュータのネットワークインターフェイスが送受信したデータ量など があります。 RRDtool ではそのようなデータを保管し、カスタマイズ可能なグラフ として視覚化することができます。
RRDtool は多くの UNIX プラットフォームや Linux ディストリビューションに
含まれています。もちろん openSUSE® でも同様です。 YaST から
インストールを行なうか、 root
になった状態で、下記のようなコマンド
ラインを入力してインストールしてください。
zypper install
rrdtool
それぞれ RRDtool には Perl, Python, Ruby, PHP の各バインディングが存在 しています。これによりお好きな言語で監視用のスクリプトを作成することが できます。 |
RRDtool は Round Robin Database tool (ラウンドロビン (循環) 型データベースツール) の省略形で、一定量のデータを取り扱うための仕組みです。 データ行に始まりも終わりも存在しないような循環型のバッファを使用してデータを 読み込みます。これをラウンドロビンデータベースと呼んでいます。
上述のとおり、 RRDtool は時間が経過するごとに変化するようなデータを扱うよう 設計されています。理想的には一定間隔でデータ (温度や速度など) を計測するような センサーを想定していて、このデータを一定の書式で出力する設計になっています。 このようなデータであれば RRDtool が便利に利用でき、期待通りの出力を 作成することができます。
場合によっては自動的かつ一定間隔で採取できないようなデータもあります。 このような場合は RRDtool に与える前に事前の処理が必要で、条件によっては RRDtool を手動で動作させなければならない場合もあります。
下記では RRDtool の基本的な使い方を示しています。一般的な RRDtool の作業 であるデータベースの 作成 と計測値による 更新 、および出力の 閲覧 を それぞれ行なっています。
ここでは、 Linux システムにおけるメモリ使用量について時間による変化を収集して 閲覧する仕組みを構築したい場合を想定します。より詳しく書くと、ここの例では その時点での空きメモリ量を 4 秒おきに 40 秒間採取しています。この計測中、 大量のシステムメモリを使用するプログラムが 3 つほど起動および終了しています。 具体的には Firefox Web ブラウザと Evolution 電子メールクライアント、および Eclipse 開発フレームワークです。
RRDtool はネットワークトラフィックの計測や可視化を行なう場合にもよく利用 されています。このような場合は Simple Network Management Protocol (SNMP) を利用して行ないます。このプロトコルではそれぞれのネットワークデバイスに 対して内部カウンタの値を問い合わせることができるため、 RRDtool を利用して これらの値を保存することができます。 SNMP について詳しくは http://www.net-snmp.org/ をお読みください。
今回の例は上記とは異なり、データを手動で採取する必要があります。下記にある free_mem.sh 支援スクリプトがメモリの空き容量について 現在の状態を読み取り、標準出力に書き込む作業を行ないます。
tux@mercury:~> cat free_mem.sh INTERVAL=4 for steps in {1..10} do DATE=`date +%s` FREEMEM=`free -b | grep "Mem" | awk '{ print $4 }'` sleep $INTERVAL echo "rrdtool update free_mem.rrd $DATE:$FREEMEM" done
注目点
時間間隔が 4 秒に設定されていますが、これは sleep コマンドで実現しています。
RRDtool は特殊な書式で時刻情報を受け入れます。具体的には Unix 時刻 と呼ばれるもので、 1970 年 1 月 1 日 の深夜 00:00 からの経過秒数を表わしているものです。たとえば 1272907114 は 2010-05-03 17:18:34 を意味しています。
メモリの空き容量情報は free -b
を利用することでバイト単位で報告されます。ここではキロバイトのような
おおまかな単位ではなく、バイト単位で正確な値を採取しています。
echo ... のコマンドには、データベースファイル
(free_mem.rrd
) が指定されていて、ここから
RRDtool のデータベースを更新するためのコマンドラインが書かれています。
free_mem.sh を実行すると、下記のような出力が現われます:
tux@mercury:~> sh free_mem.sh rrdtool update free_mem.rrd 1272974835:1182994432 rrdtool update free_mem.rrd 1272974839:1162817536 rrdtool update free_mem.rrd 1272974843:1096269824 rrdtool update free_mem.rrd 1272974847:1034219520 rrdtool update free_mem.rrd 1272974851:909438976 rrdtool update free_mem.rrd 1272974855:832454656 rrdtool update free_mem.rrd 1272974859:829120512 rrdtool update free_mem.rrd 1272974863:1180377088 rrdtool update free_mem.rrd 1272974867:1179369472 rrdtool update free_mem.rrd 1272974871:1181806592
この出力はファイルに転送しておくのが便利です。下記のようにして行ないます。
sh free_mem.sh > free_mem_updates.log
今回の設定で初期のラウンドロビンデータベースを作成するには、 下記のコマンドを入力します:
rrdtool create free_mem.rrd --start 1272974834 --step=4 \ DS:memory:GAUGE:600:U:U RRA:AVERAGE:0.5:1:24
注目点
このコマンドは free_mem.rrd
という名前の
ファイルを作成します。このファイルはラウンドロビン (循環) 型のデータベース
で、計測値を保管するために使用するものです。
--start
オプションでは、データベースに追加されるデータの
うち、最初の時間を Unix 時間形式で指定しています。この例では、
free_mem.sh の最初の値 (1272974835) よりも小さい値を
設定しています。
--step
では、データベースに対してデータを提供する間隔
を秒単位で指定しています。
DS:memory:GAUGE:600:U:U
の部分はデータベースの
データソースを指定しています。 memory という名称で
gauge というタイプのもので、 2 つの更新の最長間隔は
600 秒に設定しています。計測値の 最小 と
最大 はそれぞれ未知の値 (U) に設定しています。
RRA:AVERAGE:0.5:1:24
はラウンドロビンアーカイブ
(RRA) を作成するもので、 統合機能 (CF) を利用して
データポイントの 平均値 を計算し、保管を行ないます。
統合機能の 3 つのパラメータは、行の終わりに追加します。
何もエラーメッセージが表示されなければ、カレントディレクトリに
free_mem.rrd
データベースが作成されています:
tux@mercury:~> ls -l free_mem.rrd -rw-r--r-- 1 tux users 776 May 5 12:50 free_mem.rrd
データベースを作成したら、あとは計測データを書き込む作業です。
2.11.2.1項 「データの収集」 では既に
rrdtool update コマンドを実行するためのファイル
free_mem_updates.log
を用意してあるので、
これらのコマンドを利用してデータベースの値を更新することができます。
tux@mercury:~> sh free_mem_updates.log; ls -l free_mem.rrd -rw-r--r-- 1 tux users 776 May 5 13:29 free_mem.rrd
上記のとおり、 free_mem.rrd
のサイズは更新前後で
変化することはありません。
値を測定してデータベースを作成し、計測値を保管したら、そのデータベースを 利用してデータを取り出したり、表示したりすることができるようになります。
データベースから全ての値を取り出すには、下記のコマンドを入力します:
tux@mercury:~> rrdtool fetch free_mem.rrd AVERAGE --start 1272974830 \ --end 1272974871 memory 1272974832: nan 1272974836: 1.1729059840e+09 1272974840: 1.1461806080e+09 1272974844: 1.0807572480e+09 1272974848: 1.0030243840e+09 1272974852: 8.9019289600e+08 1272974856: 8.3162112000e+08 1272974860: 9.1693465600e+08 1272974864: 1.1801251840e+09 1272974868: 1.1799787520e+09 1272974872: nan
注目点
AVERAGE
はデータベースから平均値を取り出すための
キーワードです。これはデータソースを AVERAGE
1 つしか定義していない (2.11.2.2項 「データベースの作成」)
ためで、その他の機能は利用できません。
出力の 1 行目にはデータソースの名前が出力されています。これは 2.11.2.2項 「データベースの作成」 で設定したものです。
列の左側にはそれぞれ個別のポイントにおける時刻が表示されています。 右側には科学表記での計測値の平均が表示されています。
最後の行にある nan
は 「not a number」
(数値ではないもの) の意味です。データが存在しない場合などに出力されます。
あとはデータベース内にある値を利用してグラフを作成することができます:
tux@mercury:~> rrdtool graph free_mem.png \ --start 1272974830 \ --end 1272974871 \ --step=4 \ DEF:free_memory=free_mem.rrd:memory:AVERAGE \ LINE2:free_memory#FF0000 \ --vertical-label "GB" \ --title "Free System Memory in Time" \ --zoom 1.5 \ --x-grid SECOND:1:SECOND:4:SECOND:10:0:%X
注目点
free_mem.png
は作成するグラフのファイル名
を指定しています。
--start
と --end
はグラフ内に
描画すべき時間範囲を指定しています。
--step
はグラフの時間間隔を秒単位で指定しています。
DEF:...
の部分は free_memory
のデータ定義です。データは free_mem.rrd
ファイル
から読み込みを行ない、 memory という名前を設定
します。また、 average (平均値) を計算して出力します。
これは、 2.11.2.2項 「データベースの作成」 で設定した
とおり、それ以外の値を定義していないためです。
LINE...
の部分はグラフ内に描画する線の属性を設定して
います。 2 ピクセル幅で free_memory で定義した
データを利用し、赤色で描画します。
--vertical-label
では y 軸に
表示するラベルを指定しています。また、 --title
では
グラフ全体に対するラベル (つまりタイトル) を指定しています。
--zoom
はグラフの拡大率を指定しています。この値は
ゼロより大きい値でなければなりません。
--x-grid
ではグラフ内におけるグリッド線とラベルの描画
方法を指定しています。この例では 4 秒ごとにグリッド線を出力しています。
ラベルは各グリッド線に対して 10 秒ごとに配置しています。
RRDtool には数多くのサブコマンドとコマンドラインオプションが存在し、非常に 複雑なツールになっています。これらのうちのいくつかは理解しやすいものですが、 要件に応じた出力や好みに沿った指定を行なうには、 学習 をしなければ習得できません。
基本的な情報だけを提供している RRDtool のマニュアルページ (man 1 rrdtool) 以外に、 RRDtool homepage (英語) についてもお読みになることをお勧めします。ここには rrdtool の詳細な 文書 が置かれていて、コマンドとサブコマンドの全てが収録されています。 また、一般的な RRDtool の作業手順を示している チュートリアル もお勧めです。
また、ネットワークトラフィックの監視を行ないたい場合は、 MRTG (英語) もお読みください。 このツールは Multi Router Traffic Grapher の意味で、ネットワークデバイスに対する 全ての動作状況をグラフ化することができる RRDtool よりも使いやすいツールです。