第2章 システム監視ユーティリティ

目次

2.1. 多用途ツール
2.2. システム情報
2.3. プロセス
2.4. メモリ
2.5. ネットワーク
2.6. /proc ファイルシステム
2.7. ハードウエア情報
2.8. ファイルとファイルシステム
2.9. ユーザ情報
2.10. 日付と時刻
2.11. データのグラフ化: RRDtool

概要

お使いのシステムの状態を確認するため、数多くのプログラムやツール、 ユーティリティなどが用意されています。この章では、これらユーティリティの うちのいくつかを紹介するほか、日々の定型作業をこなすのに便利なユーティリティや、 それらの中の最も重要なパラメータについても紹介しています。

本章でコマンドを紹介する際には、コマンドと共にその出力例も表示しています。 たとえば下記の例では、最初の行がコマンドそれ自身 (行頭に > や # が書かれます) を示し、それ以降がコマンドの出力例になっています。途中の出力などを省略する場合 は、大括弧 ([...]) を利用して表記します。また、表記上の 理由で長い行を途中で改行する場合は、バックスラッシュ (日本語環境では円マーク) (\) を行末に表記します。

# command -x -y
出力 行 1
出力 行 2
出力 行 3 は厄介なまでに長いので、改行を入れて \
    行を区切っています。
出力 行 4
[...]
出力 行 98
出力 行 99

説明は、できる限り多くのユーティリティを紹介したいという意図から、できる限り 簡潔に記しています。全てのコマンドに対する詳しい情報は、各マニュアルページを お読みください。多くのコマンドでは --help オプションを指定 することにより、利用可能なパラメータの一覧と、簡易な説明が表示されます。

2.1. 多用途ツール

多くの Linux システム監視ツールは、システムの一部分を監視するのに特化した仕組み になっていますが、 十徳ナイフ のようなシステム状態を一括表示 するようなものも少数存在しています。まずはこれらのツールを利用してシステム状態の 概要をつかむとともに、どの部分についてより細かい調査を必要とするのかを確認して ください。

2.1.1. vmstat

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

[Tip]

vmstat の出力のうち最初の行には、常に直近の再起動からの平均値が表示されます。

各列には、それぞれ下記の値が表示されます:

r

実行キューに入っているプロセス数が表示されます。これらのプロセスは、処理を 行なうために CPU の空きを待っている状態です。ここの値が利用可能な CPU 数 よりも定常的に大きい場合は、 CPU の処理能力が不足していることを示します。

b

CPU 以外の資源を待機しているプロセス数が表示されます。ここの値が高い場合は、 入出力 (ネットワークまたはディスク) に問題があることを示しています。

swpd

現在使用中のスワップ領域の量 (キロバイト単位) が表示されます。

free

未使用のメモリ量 (キロバイト単位) が表示されます。

inact

未使用メモリのうち、再利用可能な量の最新値を示しています。この列は、 vmstat のパラメータに -a (推奨パラメータ) を指定した場合にのみ表示されます。

active

通常は再利用できない、直近で使用されているメモリの量を表示しています。 この列は、 vmstat のパラメータに -a (推奨パラメータ) を指定した場合にのみ表示されます。

buff

RAM 内にあるファイルバッファキャッシュのサイズ (キロバイト単位) が表示 されます。この値は、 vmstat のパラメータに -a (推奨パラメータ) を指定した場合には表示されません。

cache

RAM 内にあるページキャッシュのサイズ (キロバイト単位) が表示されます。 この値は、 vmstat のパラメータに -a (推奨パラメータ) を指定した場合には表示されません。

si

1 秒あたりにスワップ領域から RAM に移動したデータの量 (キロバイト単位) が表示されます。この列の値が長い時間高い値を示している場合、お使いの マシンに RAM を追加したほうがよりよいことを示しています。

so

1 秒あたりに RAM からスワップ領域に移動したデータの量 (キロバイト単位) が表示されます。この列の値が長い時間高い値を示している場合、お使いの マシンに RAM を追加したほうがよりよいことを示しています。

bi

1 秒あたりにブロックデバイス (ディスクなど) から読み出したブロック数が 表示されます。スワップ処理が起こった場合にも、この値が増加します。

bo

1 秒あたりにブロックデバイス (ディスクなど) に書き込んだブロック数が 表示されます。スワップ処理が起こった場合にも、この値が増加します。

in

1 秒あたりの割り込み数が表示されます。この値が高い場合、入出力 (ネットワークまたはディスク) が多く発生していることを示します。

cs

1 秒あたりのコンテキストスイッチ数が表示されます。この値を簡単に言うと、 カーネルが複数のプログラムを実行するため、一方のプログラムから他方のプログラム に実行コードを切り替えた回数を示しています。

us

ユーザプロセスによる CPU 使用率をパーセンテージで示しています。

sy

システムプロセスによる CPU 使用率をパーセンテージで示しています。

id

CPU がアイドル状態 (未使用の状態) にあった割合をパーセンテージで示しています。 この値が長い時間ずっとゼロであった場合、お使いの CPU が使い切られていることを 示しています。これは特に悪い兆候というわけではありません。 rb の値をそれぞれ確認し、十分な CPU 性能があることを 確認できれば、特にこの値が小さくても心配する必要はありません。

wa

"wa" の時間がゼロより大きい値を示している場合、データの入出力待ちでスルー プット (処理速度) が落ちていることを示しています。これはたとえばファイルを 初めて読み込むような場合や、裏での書き込み処理が追いつかないような場合には 避けられないものではあります。また、この値はハードウエア上のボトルネック (たとえばネットワークやハードディスク) が存在していることを示している場合も あります。それ以外にも、仮想メモリマネージャ (詳しくは 第15章 メモリ管理サブシステムのチューニング をお読みください) のチューニングを行なう余地があることを示している場合も あります。

st

仮想マシンで使用された CPU 時間のパーセンテージを表示しています。

さらなるオプションについては、 vmstat --help をお読みください。

2.1.2. システムの動作情報: sarsadc

sar コマンドはほぼ全ての重要なシステム動作についてレポートを 生成することのできるツールで、 CPU やメモリ、 IRQ の使用率、入出力やネットワーク などの情報を表示することができます。また本コマンドはレポートをその場で作成すること ができるほか、システム動作の収集プログラムである sadc が過去に 採取した既存の情報から作成することもできます。なお、 sarsadc は全て /proc ファイルシステムが 提供する情報を利用しています。

[Note]sysstat パッケージ

sarsadc は、いずれも sysstat パッケージに含まれています。 YaST から インストールを行なうか、もしくは zypper in sysstat でインストール を行なってください。

2.1.2.1. 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)

設定をカスタマイズしたい場合は、 sa1sa2 のスクリプトをコピーし、必要に応じて修正して ください。また、 /etc/cron.d/sysstat にある シンボリックリンクを /etc/sysstat/sysstat.cron のカスタマイズ版と入れ替えてください。

2.1.2.2. sar を利用したレポート生成

レポートをその場で作成するには、 sar コマンドに間隔 (秒) とカウントを指定して実行します。ファイルからレポートを作成するには、 間隔指定の代わりに -f オプションを利用し、ファイル名を 指定してください。ファイル名と間隔、カウントのいずれも指定しなければ、 /var/log/sa/saDD ファイルからレポートを生成します。ここで 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 の便利な使用例と解釈は後述します。各列の意味について、 詳しくは sarman (1) (マニュアルページ) をお読みください。マニュアルページには、 sar が提供する数多くのオプション指定やレポート生成方法が書かれています。

2.1.2.2.1. CPU 使用率レポート: 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

%iowait (入出力を待機していた CPU 時間の割合) が長い 時間ゼロよりも顕著に大きい場合は、入出力のシステム (ネットワークやハード ディスク) にボトルネックが存在することを示しています。また、 %idle が長い時間ゼロであった場合は、お使いの CPU の 性能を使い切っていることを示しています。 capacity.

2.1.2.2.2. メモリ使用率レポート: sar -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 列 (kbcommit%commit) には、現在の負荷量を処理するにあたって必要な合計のメモリ容量 (RAM とスワップ の合計) の最大値をそれぞれキロバイト単位とパーセント単位で表示しています。

2.1.2.2.3. ページング統計レポート: sar -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

majflt/s (1 秒あたりのメジャーフォルト) の列には、 ディスク (スワップ) からメモリ無いに読み込まれたページ数が書かれています。 メジャーフォルトの値が大きくなるとシステムの速度を低下させてしまうため、 メインメモリの不足を意味する指標になります。また、 %vmeff の列にはメインメモリ内のキャッシュやスワップキャッシュ (pgsteal/s) に対する スキャン済みページ数 (pgscand/s) の割合が表示されています。これはページの 再利用について効率値を示すもので、 100 に近い値を示す (それぞれスワップアウト された未使用のページが再利用されている) か、もしくは 0 に近い値を示す (ページがスキャンされていない) ほどシステムが効率よく働いていることを示します。 なお、この値は 30 より小さい値になるべきではありません。

2.1.2.2.4. ブロックデバイスの統計情報: sar -d

ブロックデバイス (ハードディスク、光学ドライブ、 USB ストレージデバイスなど) についての統計情報を表示するには、 -d オプションを使用します。 DEV の列を見やすくするため、 -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

お使いのマシンに複数のディスクが接続されている場合、全てのディスクに対して 平均的に入出力要求が分散していると最高の性能を引き出すことができます。 Average 行の tps, rd_sec/s, wr_sec/s の値を 全てのディスクに対して比較してください。 svctm%util の列にある値が定常的に高い場合は、ディスク内の 空き容量が不足していることが考えられます。

2.1.2.2.5. ネットワークの統計情報: sar -n キーワード

-n オプションを指定すると、ネットワークに関連する複数の レポートを生成することができます。 -n に続いて下記の キーワードを指定してください:

  • DEV: 全てのネットワークデバイスに対する統計 レポートを生成します。

  • EDEV: 全てのネットワークデバイスに対するエラー 統計レポートを生成します。

  • NFS: NFS の統計レポートを生成します。 client

  • NFSD: NFS サーバの統計レポートを生成します。

  • SOCK: ソケットに関する統計レポートを生成します。

  • ALL: 全てのネットワーク統計情報を生成します。

2.1.2.3. sar データの視覚化

sar のレポートは人間にとってそれほど見やすいものとは言えません。 kSar と呼ばれる sar データの視覚化 Java アプリケーションが ありますが、これを利用することで見やすいグラフを作成することができます。 また、このアプリケーションは PDF 形式でのレポートを作成することもできるほか、 その場での作成や過去データのファイルから作成することもできます。 なお、 kSar は BSD ライセンスで提供されています。詳しくは http://ksar.atomique.net/ をお読みください。

2.2. システム情報

2.2.1. デバイスの負荷情報: iostat

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 回表示します。

[Note]sysstat パッケージ

iostat は sysstat パッケージの一部分です。 YaST を利用するか、もしくは zypper in sysstat コマンドでパッケージをインストールしてください。

2.2.2. プロセッサの動作監視: mpstat

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

2.2.3. タスクの監視: pidstat

お使いのシステムにおいて特定のタスクの負荷を確認したい場合は、 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

2.2.4. カーネルのリングバッファ表示: dmesg

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 ファイルに保存されます。

2.2.5. 開かれているファイルの一覧表示: lsof

指定したプロセス 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)

2.2.6. カーネルと udev のイベント順序監視: udevadm monitor

udevadm monitor コマンドは、 udev のルールが発信した カーネルイベントと uevent を確認し、コンソールに対してそのイベントの デバイスパス (DEVPATH) を表示します。下記は USB メモリスティックを接続 した場合のイベント例です:

[Note]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

2.2.7. セキュリティのイベント情報: audit

Linux の監査フレームワークは複雑な監査システムで、全てのセキュリティ関連イベントを 収集します。これらの記録はその後セキュリティポリシーの違反が発生していないかどうか を調査するために分析が行なわれます。

2.2.8. X11 クライアントが利用しているサーバ資源情報の表示: xrestop

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

2.3. プロセス

2.3.1. プロセス間通信: ipcs

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

2.3.2. プロセスの一覧: ps

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 呼び出し

ps aux --sort

の出力順に並べ替えます。それぞれ には下記を指定できます。

物理メモリの比率: pmem
CPU の使用率: pcpu
常駐セットサイズ (スワップしていない物理メモリ): rss
ps axo pid,%cpu,rss,vsz,args,wchan

各プロセスについて PID と CPU の使用率、メモリサイズ (常駐および仮想) と名前、 およびシステムコール名を表示します。

ps axfo pid,args

プロセスツリー (木構造) を表示します。

2.3.3. プロセスのツリー表示: pstree

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 を指定してください。

2.3.4. プロセス表: top

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 の使用率順 (%CPU の列、ショートカットでは Shift+P) に並べられています。それぞれ下記のショートカットで並び順を変更することが できます:

Shift+M: 常駐メモリ (RES)
Shift+N: プロセス ID (PID)
Shift+T: CPU 時間 (TIME+)

それ以外の項目を並べ替えに使用するには、 F を押して一覧から 項目を選択します。並べ替え順序 (昇順、降順) を切り替えるには、 Shift+R を押します。

また、 -U UID オプションを 指定すると、特定のユーザのプロセスだけを監視するようになります。ここで、 UID にはユーザのユーザ ID を指定してください。 たとえば、 top -U $(id -u) のように入力すると、 自分自身が起動したプロセスについて一覧表示を行ないます。

2.3.5. top コマンドに似た I/O モニタ: iotop

iotop ユーティリティは、プロセスやスレッドごとに I/O 使用率を表形式で表示することができるユーティリティです。

[Tip]

iotop は既定ではインストールされません。 rootzypper in iotop を実行し、 インストールを行なってください。

iotop は指定された採取間隔の間に発生した I/O について、 その読み込みと書き込み帯域をプロセスごとに列で表示します。また、各プロセス がスワップへの書き込み処理に費やした時間の割合や、 I/O の完了を待機して いた時間の割合を表示することもできます。それ以外にも、それぞれの I/O 優先順位 (分類/レベル) も表示されます。さらに、採取間隔の間に発生した 読み込みと書き込みの I/O 帯域の合計値も、インターフェイスの冒頭部に 表示します。

並び順を変えるには、それぞれ左右のカーソルキーを使用します。また R では並び順を逆順に、 O--only オプションの切り替えを、 P--processes オプションの切り替えをそれぞれ行ないます。 さらに A--accumulated オプションの 切り替えを、 Q はプログラムの終了を行なうことができます。 また、 I はスレッドやプロセスの優先順位を変更する ことができます。それ以外のキーは全て更新を行なうためのキーです。

下記は iotop --only の出力例です。 findemacs が動作中である 状況が見えています:

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) をお読みください。

2.3.6. プロセスの nice 値の変更: nicerenice

カーネルは各プロセスの優先レベル (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 のように指定します。

2.4. メモリ

2.4.1. メモリの使用量: free

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 秒間隔で更新が行なわれます。

2.4.2. 詳細なメモリ使用量: /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

最も重要な項目は下記のとおりです:

MemTotal

利用可能な RAM の合計値

MemFree

未使用の RAM の合計値

Buffers

RAM 内のファイルバッファキャッシュ

Cached

RAM 内のページキャッシュ (バッファキャッシュを除く)

SwapCached

スワップ内のページキャッシュ

Active

通常は再利用のできない、直近で使用されたメモリ。この値は匿名ページ (Active(anon) として一覧表示されるもの) によって 要求されたメモリと、ファイルバックのページ (Active(file)) の合計値を示しています。

Inactive

再利用の可能な、直近では使用されていないメモリ。この値は匿名ページ (Inactive(anon) として一覧表示されるもの) によって 要求されたメモリと、ファイルバックページ (Inactive(file)) の合計値を示しています。

SwapTotal

スワップ領域の合計サイズ

SwapFree

未使用のスワップ領域の合計サイズ

Dirty

ディスクに書き込まれる予定のメモリ量

Writeback

現在ディスクに書き込んでいる最中のメモリ量

Mapped

nmap コマンドで割り当てられたメモリ

Slab

カーネルのデータ構造キャッシュ

SReclaimable

再利用可能な SLAB キャッシュ (inode, dentry など)

Committed_AS

現在の負荷量を処理するにあたって必要なメモリ量 (RAM とスワップ) の 合計値の見積もり

2.4.3. プロセスのメモリ使用量: smaps

特定のプロセスがどれだけメモリを利用しているのかを正確に知るには、 topps のような標準ツールでは 判断できません。このような要件には、カーネル 2.6.14 から提供されるようになった smaps サブシステムをお使いください。 smaps サブシステムは /proc/プロセス ID/smaps からアクセスできます。なお プロセス ID は 実際のプロセス ID に置き換えてください。このサブシステムは共有メモリと プライベートメモリを区別して表示するため、他のプロセスと共有されておらず 独占的に使用されているメモリ量を判断することができます。

2.5. ネットワーク

2.5.1. ネットワーク状態の表示: netstat

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

2.5.2. 対話的なネットワークモニタ: iptraf

iptraf はメニューベースのローカルエリアネットワーク (LAN) モニタです。 TCP, UDP のカウントやイーサネットの負荷情報、 IP チェックサムエラーなどのネットワーク統計情報を生成します。

[Tip]

iptraf は既定ではインストールされません。インストール を行なうには、 rootzypper in iptraf を実行 してください。

何もオプションを指定せずに実行した場合は、対話モードで動作します。 グラフィカルなメニューを利用することができるほか、 iptraf で収集したい統計情報を選択することができます。ネットワークインターフェイスを 指定することもできます。

図2.1 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%)

2.6. /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]

2.6.1. procinfo

/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 秒間に変更のあった値が表示されます。

2.7. ハードウエア情報

2.7.1. PCI 資源: lspci

[Note]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 オプションを使用してください。

2.7.2. USB デバイス: lsusb

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

2.8. ファイルとファイルシステム

2.8.1. ファイル種類の判別: file

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

2.8.2. ファイルシステムとその使用率: mount, df, du

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

2.8.3. ELF バイナリに関する追加情報表示

バイナリファイルの内容を読みたい場合は、 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

2.8.4. ファイルの属性: stat

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

2.9. ユーザ情報

2.9.1. ユーザのファイルアクセス監視: fuser

どのプロセスやユーザが特定のファイルにアクセスしているのかを確認 できれば便利です。たとえば /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 は該当するファイルにアクセスしているプロセスに対し、プロセスの終了を 行なうようになります。

2.9.2. ユーザの現状表示: w

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 オプションを指定すると、どのコンピュータから ログインしているのかが表示されるようになります。

2.10. 日付と時刻

2.10.1. 経過時間の計測: time

time ユーティリティを利用すると、指定したコマンドを 実行する際に消費された時間を表示することができます。このユーティリティは シェルの内蔵機能で提供されているほか、プログラム (/usr/bin/time) としても提供されています。

tux@mercury:~> time find . > /dev/null

real    0m4.051s1
user    0m0.042s2
sys     0m0.205s3

1

コマンドを起動してから終了するまでにかかった実際の時間を示しています。

2

times システムコールで報告された値で、 ユーザ側の処理にかかった CPU 時間を示しています。

3

times システムコールで報告された値で、 システム側の処理にかかった CPU 時間を示しています。

2.11. データのグラフ化: RRDtool

この世界には計測可能なデータが数多く存在しています。たとえば温度の変化や お使いのコンピュータのネットワークインターフェイスが送受信したデータ量など があります。 RRDtool ではそのようなデータを保管し、カスタマイズ可能なグラフ として視覚化することができます。

RRDtool は多くの UNIX プラットフォームや Linux ディストリビューションに 含まれています。もちろん openSUSE® でも同様です。 YaST から インストールを行なうか、 root になった状態で、下記のようなコマンド ラインを入力してインストールしてください。

zypper install rrdtool

[Tip]

それぞれ RRDtool には Perl, Python, Ruby, PHP の各バインディングが存在 しています。これによりお好きな言語で監視用のスクリプトを作成することが できます。

2.11.1. RRDtool の動作

RRDtool は Round Robin Database tool (ラウンドロビン (循環) 型データベースツール) の省略形で、一定量のデータを取り扱うための仕組みです。 データ行に始まりも終わりも存在しないような循環型のバッファを使用してデータを 読み込みます。これをラウンドロビンデータベースと呼んでいます。

上述のとおり、 RRDtool は時間が経過するごとに変化するようなデータを扱うよう 設計されています。理想的には一定間隔でデータ (温度や速度など) を計測するような センサーを想定していて、このデータを一定の書式で出力する設計になっています。 このようなデータであれば RRDtool が便利に利用でき、期待通りの出力を 作成することができます。

場合によっては自動的かつ一定間隔で採取できないようなデータもあります。 このような場合は RRDtool に与える前に事前の処理が必要で、条件によっては RRDtool を手動で動作させなければならない場合もあります。

下記では RRDtool の基本的な使い方を示しています。一般的な RRDtool の作業 であるデータベースの 作成 と計測値による 更新 、および出力の 閲覧 を それぞれ行なっています。

2.11.2. シンプルな実例

ここでは、 Linux システムにおけるメモリ使用量について時間による変化を収集して 閲覧する仕組みを構築したい場合を想定します。より詳しく書くと、ここの例では その時点での空きメモリ量を 4 秒おきに 40 秒間採取しています。この計測中、 大量のシステムメモリを使用するプログラムが 3 つほど起動および終了しています。 具体的には Firefox Web ブラウザと Evolution 電子メールクライアント、および Eclipse 開発フレームワークです。

2.11.2.1. データの収集

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

 

2.11.2.2. データベースの作成

今回の設定で初期のラウンドロビンデータベースを作成するには、 下記のコマンドを入力します:

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.3. データベースの値の更新

データベースを作成したら、あとは計測データを書き込む作業です。 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 のサイズは更新前後で 変化することはありません。

2.11.2.4. 計測値の閲覧

値を測定してデータベースを作成し、計測値を保管したら、そのデータベースを 利用してデータを取り出したり、表示したりすることができるようになります。

データベースから全ての値を取り出すには、下記のコマンドを入力します:

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項 「データベースの作成」 で設定したものです。

  • 列の左側にはそれぞれ個別のポイントにおける時刻が表示されています。 右側には科学表記での計測値の平均が表示されています。

  • 最後の行にある nannot 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 秒ごとに配置しています。

図2.2 RRDtool で作成したグラフ例

RRDtool で作成したグラフ例

2.11.3. さらなる情報

RRDtool には数多くのサブコマンドとコマンドラインオプションが存在し、非常に 複雑なツールになっています。これらのうちのいくつかは理解しやすいものですが、 要件に応じた出力や好みに沿った指定を行なうには、 学習 をしなければ習得できません。

基本的な情報だけを提供している RRDtool のマニュアルページ (man 1 rrdtool) 以外に、 RRDtool homepage (英語) についてもお読みになることをお勧めします。ここには rrdtool の詳細な 文書 が置かれていて、コマンドとサブコマンドの全てが収録されています。 また、一般的な RRDtool の作業手順を示している チュートリアル もお勧めです。

また、ネットワークトラフィックの監視を行ないたい場合は、 MRTG (英語) もお読みください。 このツールは Multi Router Traffic Grapher の意味で、ネットワークデバイスに対する 全ての動作状況をグラフ化することができる RRDtool よりも使いやすいツールです。


openSUSE システム分析とチューニングガイド 13.1