Jump to contentJump to page navigation: previous page [access key p]/next page [access key n]
適用先 openSUSE Leap 15.7

2 システム監視ユーティリティ Edit source

概要

お使いのシステムの状態を調査する際、提供されているプログラムやツール、ユーティリティは多数存在します。本章では、最も重要なものの紹介のほか、それらでよく使用されるパラメータについて説明しています。

以降のコマンドの説明では、コマンドの出力例も含めて示されています。たとえば下記の例では、最初の行 (tux > や root # 以降) がコマンド自身で、それ以降がコマンドの出力になっています。出力が長い場合は大括弧とピリオド ( [...] ) で省略される場合があるほか、 1 行が長い場合は必要に応じて折り返して示しています。なお、行を折り返す場合、行末にはバックスラッシュ ( \ ) が書かれます。

> command -x -y
1 行目の出力 1
2 行目の出力
3 行目の出力 ... 非常に長い出力を行っているため、\
    ここで改行しています
4 行目の出力
[...]
98 行目の出力
99 行目の出力

また、できる限り多くのユーティリティを紹介する目的から、説明は短くまとめられています。それぞれのコマンドの詳細については、対応するマニュアルページをお読みください。それ以外にも、ほとんどのコマンドには --help というオプションが用意されていて、ここから指定可能なパラメータ一覧を取得することができます。

2.1 多用途ツール Edit source

ほとんどの Linux におけるシステム監視ツールは、システム内の 1 つの要素しか参照しない仕組みになっていますが、ツールによっては幅広く監視を行ってくれるものもあります。システムの問題点を絞り込みたい場合は、まずこれらのツールをお使いのうえ、原因を探ってみてください:

2.1.1 vmstat Edit source

vmstat はプロセスやメモリ、 I/O や割り込み、 CPU に関する情報を収集します:

vmstat [オプション] [待ち時間 [回数]]

待ち時間と回数のパラメータを指定しないで実行すると、直近の再起動以降の平均値のみを出力します。待ち時間 (秒単位) を指定して実行すると、指定した時間内 (下記の例では 2 秒) での値を表示します。回数を指定した場合は、 vmstat で情報を表示する回数を指定することができます。回数を指定しない場合は、停止するまで何度も情報を採取し続けます。

例 2.1: 負荷の軽いマシンにおける vmstat の出力
> 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
 1  0  44264  81520    424 935736    0    0    12    25   27   34  1  0 98   0  0
 0  0  44264  81552    424 935736    0    0     0     0   38   25  0  0 100  0  0
 0  0  44264  81520    424 935732    0    0     0     0   23   15  0  0 100  0  0
 0  0  44264  81520    424 935732    0    0     0     0   36   24  0  0 100  0  0
 0  0  44264  81552    424 935732    0    0     0     0   51   38  0  0 100  0  0
例 2.2: CPU 負荷の重いマシンにおける vmstat の出力
> 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 の出力のうち最初の行は、直近の再起動からの平均値を示しています。

それぞれの列の意味は下記のとおりです:

r

実行可能 (Runnable) 状態にあるプロセスの数を表します。これらのプロセスは実行中でするか、もしくは CPU スロットの空きを待っている状態であることになります。この列に表示されている値が、利用可能な CPU の数よりも定常的に高い場合は、 CPU の能力が不足している可能性を示しています。

b

CPU 以外のリソースを待機しているプロセスの数を表します。この列の値が高い場合、ネットワークやディスクなど I/O の問題が発生している可能性を示しています。

swpd

現在使用中の状態にあるスワップ領域 (キロバイト単位) を表します。

free

未使用のメモリ (キロバイト単位) を表します。

inact

回収可能な未使用のメモリ量を表しています。この列は、 vmstat-a オプション (推奨) を指定した場合にのみ表示されます。

active

通常は回収することのできない、使用中のメモリ量を表しています。この列は、 vmstat-a オプション (推奨) を指定した場合にのみ表示されます。

buff

ファイルシステムのメタデータを含む、メモリ内のファイルバッファキャッシュ量 (キロバイト単位) を表しています。こちらの列は、 vmstat-a オプションを指定した場合、表示されません。

cache

ファイル内の実際の内容を含む、メモリ内のページキャッシュ量 (キロバイト単位) を表しています。こちらの列は、 vmstat-a オプションを指定した場合、表示されません。

si / so

スワップ領域からメモリ ( si ) 、もしくはメモリからスワップ領域 ( so ) に移動されたメモリ量を、キロバイト毎秒で表した値です。 so の値が長時間にわたって高いままである場合、アプリケーション側でメモリリーク (漏洩) が発生している可能性があり、そのメモリリークによってメモリがスワップ領域内に書き込まれている可能性があります。また si の値が長時間にわたって高いままである場合は、長い時間アプリケーションが休眠状態にあって、後から活動状態に戻ったことを表しています。 siso の値が両方とも長時間にわたって高いままである場合は、スワップ領域が多用されていることになりますので、アプリケーションの作業に必要なメモリのほうが実際のメモリ量よりも大きいことを示しています。

bi

ブロックデバイスから受信された (たとえばディスクから読み込んだ) ブロック数を毎秒単位で表した値です。この値は、スワップ領域を使用した場合にも上昇します。ただし、ブロックサイズはファイルシステムによっても異なりますが、 stat ユーティリティを使用することで知ることができます。スループットのデータをご希望の場合は、 iostat をお使いください。

bo

ブロックデバイスに送信した (たとえばディスクに書き込んだ) ブロック数を毎秒単位で表した値です。この値は、スワップ領域を使用した場合にも上昇します。

in

毎秒の割り込み数を表します。この値が高い場合、 I/O (ネットワークもしくはディスク) の負荷が高いことを表していますが、他の処理でプロセッサ間割り込みを発生させているなど、他の理由によるものかもしれません。割り込みの詳細については、 /proc/interrupts ファイルをご覧ください。

cs

毎秒のコンテキスト切り替え数を表しています。この値は、カーネルが一方のプロセスから他方のプロセスに処理を移した回数を表しています。

us

アプリケーションコードを実行するのに消費した CPU 時間の割合を示しています。

sy

カーネルコードを実行するのに消費した CPU 時間の割合を示しています。

id

待機状態にあった CPU 時間の割合を示しています。この値がずっと 0 であり続けているような場合、 CPU に空きがないことを示しています。ただし、この値が 0 であったからといって、それが悪い知らせであるとは限りません。十分な CPU 性能があるものとお考えの場合は、 rb の列の値を読んで原因を探ってみることをお勧めします。

wa

"wa" の値が 0 以上になっている場合、入出力処理の待ちによってスループットが落ちていることを表しています。ただし、ファイルを最初に読み込んだ場合や、裏での書き込みが間に合っていないような場合など、どうしても避けられない場合もあります。また、ハードウエアのボトルネック (ネットワークもしくはハードディスク) を示している可能性もあります。このほか、仮想メモリマネージャ (詳しくは 第15章 「メモリ管理サブシステムのチューニング をお読みください) でチューニングを行う必要性を示していることもあります。

st

仮想マシンであることにより、 CPU 時間が確保できなかった割合を示しています。

その他のオプションについては、 vmstat --help をお読みください。

dstatvmstat , iostat , netstat , ifstat などに対する代替として提供されているツールです。 dstat はシステムリソースの情報をリアルタイムに表示します。たとえばディスクの使用率と IDE コントローラの割り込みを比較したり、ネットワークの帯域とディスクの帯域を同じタイミングで計測したりすることができます。

既定では読みやすい表形式で出力しますが、表計算プログラムなどに取り込む目的で、 CSV などの出力形式を指定することもできます。

また、このプログラムは Python 言語で記述され、プラグインで機能を拡張することができます。

一般的な書式は下記のとおりです:

dstat [-afv] [オプション..] [間隔 [回数]]

オプションやパラメータは全て必要に応じて設定します。何もパラメータを指定しない場合、 dstat は CPU に関する統計情報 ( -c , --cpu ), ディスクに関する統計情報 ( -d , --disk ), ネットワーク に関する統計情報 ( -n , --net ), ページング ( -g , --page ), システムの割り込みおよびコンテキストスイッチに関する統計情報 ( -y , --sys ) をそれぞれ表示します。また、 1 秒間隔で情報を採取するほか、停止するまで半永久的に動作し続けるようになります:

# dstat
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw
  0   0 100   0   0   0|  15k   44k|   0     0 |   0    82B| 148   194
  0   0 100   0   0   0|   0     0 |5430B  170B|   0     0 | 163   187
  0   0 100   0   0   0|   0     0 |6363B  842B|   0     0 | 196   185
-a , --all

-cdngy (既定値) と同じ意味を持ちます

-f , --full

-C , -D , -I , -N , -S にそれぞれ検出されたデバイスを指定したものとして処理されます

-v , --vmstat

-pmgdsc , -D total と同じ意味を持ちます

間隔

データを出力する間隔を秒単位で指定します

回数

指定した回数だけ情報を出力して終了するようにします

既定では 1 秒間隔で回数は無制限になります。

詳しくは dstat のマニュアルページ、もしくは http://dag.wieers.com/home-made/dstat/ にある Web ページをお読みください。

2.1.3 システムの動作状況の監視: sar Edit source

sar コマンドを使用することで、 CPU やメモリ、 IRQ の使用状況や I/O 、ネットワーキングに至るまで、ほとんど全ての主なシステム動作状況に対するレポートを生成することができます。必要であれば、リアルタイムなレポートを生成することもできます。また、 sar は元となるデータを /proc ファイルシステムを利用して収集します。

注記
注記: sysstat パッケージについて

sar コマンドは sysstat パッケージ内に含まれています。 YaST を利用してインストールするか、 zypper in sysstat と入力して実行し、インストールを行ってください。なお、 sysstat.service は既定では動作しないようになっていますので、下記のようにして有効化し、起動しておく必要があります:

> sudo systemctl enable --now sysstat

2.1.3.1 sar によるレポートの生成 Edit source

リアルタイムなレポートを生成したい場合は、 sar コマンドに間隔 (秒単位) と回数を指定してください。また、指定したファイルからレポートを生成したい場合は、間隔と回数の代わりに -f でファイル名を指定してください。ファイル名も間隔と回数も指定しない場合、 sar/var/log/sa/saDD からレポートを生成しようとします。ここで、 DD は今日の月内日を表します。これは sadc (System Activity Data Collector) コマンドがデータを書き込む際の既定の場所として決められているものです。複数のファイルを使用したい場合は、 -f オプションを複数回指定してください。

sar 2 10                         # リアルタイムなレポートを生成 (2 秒間隔で 10 回)
sar -f ~/reports/sar_2014_07_17  # sar_2014_07_17 ファイルからレポートを生成
sar                              # /var/log/sa/ 内にある本日分のデータからレポートを生成
cd /var/log/sa && \
sar -f sa01 -f sa02              # /var/log/sa/0[12] ファイルからレポートを生成

下記には、便利な sar コマンドのオプションと、その解釈が示されています。各列の詳しい意味については、 sar のマニュアルページ (1) をお読みください。オプションやレポートに関する詳細についてもマニュアルページをお読みください。

注記
注記: sysstat サービスが停止した際にレポート生成も停止されてしまう件について

システムの再起動やシャットダウンなどで sysstat サービスが停止されていた場合でも、ツールは /usr/lib64/sa/sa1 -S ALL 1 1 コマンドを自動的に実行して直近の統計情報を採取し続けます。収集されたバイナリデータはシステムの動作データファイル内に保存されます。

2.1.3.1.1 CPU 使用率レポート: sar Edit source

何もオプションを指定しないで sar を実行すると、 CPU 使用率に関する基本的なレポートを生成します。マルチプロセッサ環境では、全ての CPU の結果がまとめて出力されます。個別の CPU について出力を行いたい場合は、 -P ALL オプションを指定してください。

# sar 10 5
Linux 6.4.0-150600.9-default (jupiter)         2024年11月03日  _x86_64_        (2 CPU)

17時51分29秒    CPU     %user     %nice   %system   %iowait    %steal     %idle
17時51分39秒    all     57.93      0.00      9.58      1.01      0.00     31.47
17時51分49秒    all     32.71      0.00      3.79      0.05      0.00     63.45
17時51分59秒    all     47.23      0.00      3.66      0.00      0.00     49.11
17時52分09秒    all     53.33      0.00      4.88      0.05      0.00     41.74
17時52分19秒    all     56.98      0.00      5.65      0.10      0.00     37.27
平均値:         all     49.62      0.00      5.51      0.24      0.00     44.62

%iowait は CPU が I/O リクエストに対する応答を待っていて、待機状態になった時間の割合を示しています。この値が長時間にわたって 0 より高いままである場合は、 I/O システム (ネットワークまたはハードディスク) 内にボトルネックが存在するものと考えられます。また、 %idle が長い時間にわたって 0 になっている場合、お使いの CPU には余裕が無くなっていることを表しています。

2.1.3.1.2 メモリ使用率レポート: sar -r Edit source

システムに搭載されたメモリ (RAM) に関する概要を知りたい場合は、オプション -r を使用します:

# sar -r 10 5
Linux 6.4.0-150600.9-default (jupiter)         2024年03月11日  _x86_64_        (2 CPU)

17時55分27秒 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
17時55分37秒  104232   1834624    94.62        20   627340  2677656   66.24   802052  828024    1744
17時55分47秒   98584   1840272    94.92        20   624536  2693936   66.65   808872  826932    2012
17時55分57秒   87088   1851768    95.51        20   605288  2706392   66.95   827260  821304    1588
17時56分07秒   86268   1852588    95.55        20   599240  2739224   67.77   829764  820888    3036
17時56分17秒  104260   1834596    94.62        20   599864  2730688   67.56   811284  821584    3164
平均値:        96086   1842770    95.04        20   611254  2709579   67.03   815846  823746    2309

kbcommit%commit の列は、それぞれ現在の処理内容に応じた最大メモリ量 (物理メモリとスワップ領域) の概算を表しています。 kbcommit はキロバイト単位で、 %commit は割合でそれぞれ表現されています。

2.1.3.1.3 ページング統計レポート: sar -B Edit source

カーネルのページングに関する統計情報を表示したい場合は、 -B オプションを使用します。

# sar -B 10 5
Linux 6.4.0-150600.9-default (jupiter)         2024年11月03日  _x86_64_        (2 CPU)

18時23分01秒 pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
18時23分11秒   366.80     11.60  542.50     1.10  4354.80      0.00      0.00      0.00   0.00
18時23分21秒     0.00    333.30 1522.40     0.00 18132.40      0.00      0.00      0.00   0.00
18時23分31秒    47.20    127.40 1048.30     0.10 11887.30      0.00      0.00      0.00   0.00
18時23分41秒    46.40      2.50  336.10     0.10  7945.00      0.00      0.00      0.00   0.00
18時23分51秒     0.00    583.70 2037.20     0.00 17731.90      0.00      0.00      0.00   0.00
平均値:         92.08    211.70 1097.30     0.26 12010.28      0.00      0.00      0.00   0.00

majflt/s (メジャーフォルト毎秒) の列には、ディスクからメモリに読み込まれたページ数が表示されています。フォルトを発生させる要因としては、ファイルへのアクセスのほか、アプリケーションのバグによるものである場合もあります。ただし、メジャーフォルトが大きいからといって、それがそのまま何らかの問題を表しているとは限りません。たとえばアプリケーションの起動時には、一般的に様々なファイルを読み込むことから、メジャーフォルトも大きくなりがちです。メジャーフォルトがアプリケーションの動作中ずっと高いままで、特にダイレクトスキャンも同時に大きくなっているような場合は、メインメモリが不足していることを表している場合があります。

%vmeff の列には、メインメモリやスワップ領域のキャッシュ ( pgsteal/s ) から再利用されたページに対する、スキャン済みページ数 ( pgscand/s ) の割合を示しています。これはページの回収処理の効率性を表している値で、性能に問題のないシステムであれば、 100 (スワップアウトした全ての非活動ページが再利用された) もしくは 0 (ページをスキャンしていない) に近い値になるはずです。この値は通常、 30 を下回るべきではありません。

2.1.3.1.4 ブロックデバイス統計レポート: sar -d Edit source

-d オプションを使用することで、ブロックデバイス (ハードディスク、光学ドライブ、 USB ストレージデバイスなど) の統計情報を表示することができます。 DEV 列を読みやすくしたい場合は、追加オプション -p (pretty-print, わかりやすい表示) を指定してください。

# sar -d -p 10 5
 Linux 6.4.0-150600.9-default (jupiter)         2024年11月03日  _x86_64_        (2 CPU)

18時46分09秒 DEV   tps rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
18時46分19秒 sda  1.70    33.60      0.00     19.76      0.00      0.47      0.47      0.08
18時46分19秒 sr0  0.00     0.00      0.00      0.00      0.00      0.00      0.00      0.00

18時46分19秒 DEV   tps rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
18時46分29秒 sda  8.60   114.40    518.10     73.55      0.06      7.12      0.93      0.80
18時46分29秒 sr0  0.00     0.00      0.00      0.00      0.00      0.00      0.00      0.00

18時46分29秒 DEV   tps rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
18時46分39秒 sda 40.50  3800.80    454.90    105.08      0.36      8.86      0.69      2.80
18時46分39秒 sr0  0.00     0.00      0.00      0.00      0.00      0.00      0.00      0.00

18時46分39秒 DEV   tps rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
18時46分49秒 sda  1.40     0.00    204.90    146.36      0.00      0.29      0.29      0.04
18時46分49秒 sr0  0.00     0.00      0.00      0.00      0.00      0.00      0.00      0.00

18時46分49秒 DEV   tps rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
18時46分59秒 sda  3.30     0.00    503.80    152.67      0.03      8.12      1.70      0.56
18時46分59秒 sr0  0.00     0.00      0.00      0.00      0.00      0.00      0.00      0.00

平均値: DEV   tps rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
平均値: sda 11.10   789.76    336.34    101.45      0.09      8.07      0.77      0.86
平均値: sr0  0.00     0.00      0.00      0.00      0.00      0.00      0.00      0.00

平均値 内にある tps , rd_sec/s , wr_sec/s の各値を、全てのディスクに対して比較してください。svctm 列や %util 列の値が定常的に高い場合は、 I/O サブシステムがボトルネックなっている可能性があります。

お使いのマシンに複数のディスクが接続されている場合、それらのディスクの速度と性能が等しい場合は、 I/O を分散させることが最適です。また、ストレージが複数階層で構成されているかどうかも考慮する必要があります。これに加えて、ストレージへのアクセス方式が複数存在するような場合は、その使用方法を均等にする場合のリンク飽和度についても検討してください。

2.1.3.1.5 ネットワーク統計レポート: sar -n キーワード Edit source

-n オプションを使用することで、様々なネットワーク関連のレポートを生成することができます。 -n の後ろに指定することのできるキーワードには、下記のものがあります:

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

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

  • NFS : NFS クライアントに対する統計レポートを生成

  • NFSD : NFS サーバに対する統計レポートを生成

  • SOCK : ソケットに対する統計レポートを生成

  • ALL : 全てのネットワーク統計レポートを生成

2.1.3.2 sar データの可視化 Edit source

sar が生成するレポートは、必ずしも読みやすいものであるとは言い切れません。その代わり、 kSar と呼ばれる sar データを可視化するための Java アプリケーションを使用することで、読みやすいグラフを生成することができます。このソフトウエアは PDF 形式のレポートにも対応しているほか、リアルタイムなデータとファイルに保存された過去データの両方に対応しています。 kSar は BSD ライセンスで提供されています。詳しくは https://sourceforge.net/projects/ksar/ をお読みください。

2.2 システム情報 Edit source

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

システムのデバイス負荷を監視したい場合は、 iostat をお使いください。このソフトウエアは、お使いのシステムに接続された複数のディスクの間で、負荷を分散させたいような場合に有用なレポートを生成します。

iostat を使用するには、 sysstat パッケージをインストールしてください。

最初の iostat レポートには、システムの起動以降の収集データが表示されます。 2 つ目以降のレポートには、前回のレポート生成以降の収集データが表示されます。

> iostat
Linux 6.4.0-150600.9-default (jupiter)         2024年11月03日  _x86_64_        (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          17.68    4.49    4.24    0.29    0.00   73.31

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sdb               2.02        36.74        45.73    3544894    4412392
sda               1.05         5.12        13.47     493753    1300276
sdc               0.02         0.14         0.00      13641         37

この方法で iostat を動作させることで、まずはスループットが期待通りの値になっているかどうかを確認することができます。ただし、原因については示されません。原因を調べたい場合は、 iostat -x のように入力して実行し、さらに詳しい拡張レポートを生成してください。拡張レポートには、平均キューサイズや平均待機時間などの追加情報が含まれます。なお、動作していないブロックデバイスを除外して表示したい場合は、 -z オプションを追加してください。それぞれの列の意味について、詳しくは iostat のマニュアルページ ( man 1 iostat ) をお読みください。

指定したデバイスを指定した間隔で監視することもできます。たとえば 3 秒間隔で合計 5 回、 sda デバイスを監視したい場合は、下記のように実行します:

> iostat -p sda 3 5

ネットワークファイルシステム (NFS) の統計情報を表示したい場合は、下記に示す 2 種類の類似ユーティリティをお使いいただくことができます:

  • nfsiostat-sysstat: sysstat パッケージ内に含まれています。

  • nfsiostat: nfs-client パッケージ内に含まれています。

注記
注記: マルチパス環境での iostat の使用について

iostat を利用しても、 nvme list-subsys で一覧表示されるコントローラを全て表示するわけではありません。既定では iostat は、 I/O の発生していないブロックデバイスを表示しないためです。 iostat全て のデバイスを表示するようにしたい場合は、下記のようなコマンドを実行してください:

>  iostat -p ALL

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

mpstat ユーティリティは、利用可能なプロセッサに対して、動作状況を調べることができます。お使いのシステムにプロセッサが 1 つしか接続されていない場合、グローバルな平均統計情報が出力されます。

間隔の指定は iostat コマンドと同じです。たとえば mpstat 2 5 のように入力して実行すると、 2 秒間隔で合計 5 回のレポートを生成します。

# mpstat 2 5
Linux 6.4.0-150600.9-default (jupiter)         2024年11月03日  _x86_64_        (2 CPU)

13時51分10秒  CPU   %usr  %nice  %sys  %iowait  %irq  %soft  %steal  %guest  %gnice   %idle
13時51分12秒  all   8,27   0,00  0,50     0,00  0,00   0,00    0,00    0,00    0,00   91,23
13時51分14秒  all  46,62   0,00  3,01     0,00  0,00   0,25    0,00    0,00    0,00   50,13
13時51分16秒  all  54,71   0,00  3,82     0,00  0,00   0,51    0,00    0,00    0,00   40,97
13時51分18秒  all  78,77   0,00  5,12     0,00  0,00   0,77    0,00    0,00    0,00   15,35
13時51分20秒  all  51,65   0,00  4,30     0,00  0,00   0,51    0,00    0,00    0,00   43,54
平均値:       all  47,85   0,00  3,34     0,00  0,00   0,40    0,00    0,00    0,00   48,41

mpstat のデータは、下記のようにして判断します:

  • まずは %usr%sys の比率を調べます。たとえば 10:1 のように、 %usr のほうがずっと高い場合、負荷はアプリケーション側のコードによって生み出されているもので、アプリケーション側の調査を行う必要があることを示しています。逆に 1:10 のように、 %sys のほうがずっと高い場合、負荷はカーネル側が生み出しているもので、カーネルのチューニングを検討する必要があることになります。このほか、アプリケーションがなぜカーネルを頼りがちなのかや、それを軽減できないかを調べる手もあります。

  • システム全体では負荷が軽いのに、特定の CPU に負荷が集中しているような事象が発生していないかどうかを調べます。特定の CPU に負荷が集中する場合、それは負荷が適切に並列化されていないことを表しているため、より高速で少ない数のプロセッサの環境に構成し直したほうが良いことを示していることもあります。

2.2.3 プロセッサ周波数の監視: turbostat Edit source

turbostat は AMD64/Intel 64 プロセッサに対して、周波数や負荷、温度や速度を表示するためのコマンドです。このコマンドには 2 つのモードが存在しています。 turbostat の後ろに実行したいコマンドラインを指定した場合は、指定したコマンドラインを実行し、完了時に統計情報を表示します。コマンドラインを指定しない場合、 5 秒間隔で統計情報を更新して表示します。なお turbostat を実行するには、 msr カーネルモジュールを読み込んでおく必要があります。

> sudo turbostat find /etc -type d -exec true {} \;
0.546880 sec
     CPU Avg_MHz   Busy% Bzy_MHz TSC_MHz
       -     416   28.43    1465    3215
       0     631   37.29    1691    3215
       1     416   27.14    1534    3215
       2     270   24.30    1113    3215
       3     406   26.57    1530    3214
       4     505   32.46    1556    3214
       5     270   22.79    1184    3214

出力される内容は CPU によって異なります。温度や消費電力などの追加情報を表示したい場合は、 --debug オプションを指定してください。コマンドラインオプションの説明や、各項目の意味について、詳しくは man 8 turbostat をお読みください。

2.2.4 タスクの監視: pidstat Edit source

お使いのシステム内で、どの処理 (プロセス) が重いのかを調べたい場合は、 pidstat コマンドをお使いください。選択したプロセスのみの動作状況を表示することができるほか、 Linux カーネルが管理する全てのプロセスを表示することもできます。また、生成するレポート数や生成間隔なども指定することができます。

たとえば pidstat -C firefox 2 3 のように入力して実行すると、コマンド名に firefox という文字列を含むプロセスに関する情報を出力します。レポートは 2 秒間隔で計 3 回出力します。

# pidstat -C firefox 2 3
Linux 6.4.0-150600.9-default (jupiter)         2024年11月03日  _x86_64_        (2 CPU)

14時09分11秒    UID       PID    %usr %system  %guest    %CPU   CPU  Command
14時09分13秒   1000       387   22,77    0,99    0,00   23,76     1  firefox

14時09分13秒    UID       PID    %usr %system  %guest    %CPU   CPU  Command
14時09分15秒   1000       387   46,50    3,00    0,00   49,50     1  firefox

14時09分15秒    UID       PID    %usr %system  %guest    %CPU   CPU  Command
14時09分17秒   1000       387   60,50    7,00    0,00   67,50     1  firefox

平均値:       UID       PID    %usr %system  %guest    %CPU   CPU  Command
平均値:      1000       387   43,19    3,65    0,00   46,84     -  firefox

同様に、 pidstat -d と入力して実行することで、プロセスがどれだけ I/O を実行しているのか、その I/O の間にプロセスが休眠状態にあるのかどうか、そしてどれだけの時間タスクが停止していたのかを調べることができます。

2.2.5 カーネルのリングバッファの表示: dmesg Edit source

Linux カーネルは出力したメッセージをリングバッファ内に保持しています。保持しているメッセージを表示したい場合は、 dmesg -T のように入力して実行します。

ここに保持されていない古いメッセージは、 systemd のジャーナル内に保存されています。ジャーナルに関する詳細は、 第11章 「journalctl : systemd ジャーナルへの問い合わせコマンド をお読みください。

2.2.6 開いているファイルの一覧: lsof Edit source

プロセス ID を指定して開いているファイルを表示したい場合は、 lsof -p プロセス_ID のように入力して実行します。たとえば現在のシェルが開いているファイルを表示したい場合は、下記のようにします:

# lsof -p $$
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF  NODE NAME
bash    8842 root  cwd    DIR   0,32      222  6772 /root
bash    8842 root  rtd    DIR   0,32      166   256 /
bash    8842 root  txt    REG   0,32   656584 31066 /bin/bash
bash    8842 root  mem    REG   0,32  1978832 22993 /lib64/libc-2.19.so
[...]
bash    8842 root    2u   CHR  136,2      0t0     5 /dev/pts/2
bash    8842 root  255u   CHR  136,2      0t0     5 /dev/pts/2

ここで、 $$ は特殊なシェル変数で、現在使用しているシェルのプロセス ID を表します。

-i オプションを指定すると、 lsof はネットワーク接続を表示することができます:

# lsof -i
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
wickedd-d  917 root    8u  IPv4  16627      0t0  UDP *:bootpc
wickedd-d  918 root    8u  IPv6  20752      0t0  UDP [fe80::5054:ff:fe72:5ead]:dhcpv6-client
sshd      3152 root    3u  IPv4  18618      0t0  TCP *:ssh (LISTEN)
sshd      3152 root    4u  IPv6  18620      0t0  TCP *:ssh (LISTEN)
master    4746 root   13u  IPv4  20588      0t0  TCP localhost:smtp (LISTEN)
master    4746 root   14u  IPv6  20589      0t0  TCP localhost:smtp (LISTEN)
sshd      8837 root    5u  IPv4 293709      0t0  TCP jupiter.suse.de:ssh->venus.suse.de:33619 (ESTABLISHED)
sshd      8837 root    9u  IPv6 294830      0t0  TCP localhost:x11 (LISTEN)
sshd      8837 root   10u  IPv4 294831      0t0  TCP localhost:x11 (LISTEN)

2.2.7 カーネルと udev のイベントシーケンスの表示: udevadm monitor Edit source

udevadm monitor のように入力して実行すると、カーネルが生成する udev のイベントや udev ルールによって送信されたイベントのほか、そのイベントのデバイスパス (DEVPATH) をコンソールに出力することができます。下記は USB メモリを接続した場合のイベント例です:

注記
注記: udev イベントの監視について

udevadm コマンドを実行して udev イベントを監視するには、 root 権限が必要となります。

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.3 プロセス Edit source

2.3.1 プロセス間通信の情報: ipcs Edit source

ipcs コマンドは、現在使用されている IPC リソースの一覧を表示します:

# ipcs
------ メッセージキュー --------
キー       msqid      所有者     権限        使用済みバイト数  メッセージ

------ 共有メモリセグメント --------
キー       shmid      所有者     権限        バイト     nattch     状態
0x00000000 65536      tux        600        524288     2          dest
0x00000000 98305      tux        600        4194304    2          dest
0x00000000 884738     root       600        524288     2          dest
0x00000000 786435     tux        600        4194304    2          dest
0x00000000 12058628   tux        600        524288     2          dest
0x00000000 917509     root       600        524288     2          dest
0x00000000 12353542   tux        600        196608     2          dest
0x00000000 12451847   tux        600        524288     2          dest
0x00000000 11567114   root       600        262144     1          dest
0x00000000 10911763   tux        600        2097152    2          dest
0x00000000 11665429   root       600        2336768    2          dest
0x00000000 11698198   root       600        196608     2          dest
0x00000000 11730967   root       600        524288     2          dest

------ セマフォ配列 --------
キー       semid      所有者     権限       nsems
0xa12e0919 32768      tux        666        2

2.3.2 プロセス一覧: ps Edit source

ps コマンドはプロセスの一覧を表示します。このコマンドでは、ほとんどのパラメータをハイフン無しで指定しなければなりません。簡潔なヘルプを読みたい場合は ps --help と入力して実行し、より詳細な説明を読みたい場合はマニュアルページを参照してください。

ユーザとコマンドライン情報を含めて全てのプロセスを一覧表示するには、 ps axu のように入力して実行します:

> ps axu
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.3  34376  4608 ?        Ss   Jul24   0:02 /usr/lib/systemd/systemd
root         2  0.0  0.0      0     0 ?        S    Jul24   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    Jul24   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   Jul24   0:00 [kworker/0:0H]
root         6  0.0  0.0      0     0 ?        S    Jul24   0:00 [kworker/u2:0]
root         7  0.0  0.0      0     0 ?        S    Jul24   0:00 [migration/0]
[...]
tux      12583  0.0  0.1 185980  2720 ?        Sl   10:12   0:00 /usr/lib/gvfs/gvfs-mtp-volume-monitor
tux      12587  0.0  0.1 198132  3044 ?        Sl   10:12   0:00 /usr/lib/gvfs/gvfs-gphoto2-volume-monitor
tux      12591  0.0  0.1 181940  2700 ?        Sl   10:12   0:00 /usr/lib/gvfs/gvfs-goa-volume-monitor
tux      12594  8.1 10.6 1418216 163564 ?      Sl   10:12   0:03 /usr/bin/gnome-shell
tux      12600  0.0  0.3 393448  5972 ?        Sl   10:12   0:00 /usr/lib/gnome-settings-daemon-3.0/gsd-printer
tux      12625  0.0  0.6 227776 10112 ?        Sl   10:12   0:00 /usr/lib/gnome-control-center-search-provider
tux      12626  0.5  1.5 890972 23540 ?        Sl   10:12   0:00 /usr/bin/nautilus --no-default-window
[...]

どれだけの数の sshd プロセスが動作しているのかを調べたい場合は、 -p オプションとともに pidof コマンドを併用してください。 pidof コマンドは、指定した名前のプロセス ID を列挙するためのコマンドです。

> ps -p $(pidof sshd)
  PID TTY      STAT   TIME COMMAND
 1545 ?        Ss     0:00 /usr/sbin/sshd -D
 4608 ?        Ss     0:00 sshd: root@pts/0

プロセス一覧の表示は、必要に応じて書式を変更することができます。 L オプションを使用すると、全てのキーワードの一覧を表示することができます。たとえばメモリの使用率順に全てのプロセスを一覧表示したい場合は、下記のように入力して実行します:

> ps ax --format pid,rss,cmd --sort rss
  PID   RSS CMD
  PID   RSS CMD
    2     0 [kthreadd]
    3     0 [ksoftirqd/0]
    4     0 [kworker/0:0]
    5     0 [kworker/0:0H]
    6     0 [kworker/u2:0]
    7     0 [migration/0]
    8     0 [rcu_bh]
[...]
12518 22996 /usr/lib/gnome-settings-daemon-3.0/gnome-settings-daemon
12626 23540 /usr/bin/nautilus --no-default-window
12305 32188 /usr/bin/Xorg :0 -background none -verbose
12594 164900 /usr/bin/gnome-shell
便利な ps のオプション
ps aux --sort 列名

列名 で指定した項目の値で並べ替えを行います。 列名 には下記の名前を指定することができます:

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

各プロセスに対して、プロセス ID, CPU 使用率, メモリサイズ (常駐および仮想), 名前, システムコールをそれぞれ表示します。

ps axfo pid,args

プロセスをツリー形式で表示します。

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

pstree コマンドは、プロセスの一覧をツリー形式で出力します:

> pstree
systemd---accounts-daemon---{gdbus}
        |                 |-{gmain}
        |-at-spi-bus-laun---dbus-daemon
        |                 |-{dconf worker}
        |                 |-{gdbus}
        |                 |-{gmain}
        |-at-spi2-registr---{gdbus}
        |-cron
        |-2*[dbus-daemon]
        |-dbus-launch
        |-dconf-service---{gdbus}
        |               |-{gmain}
        |-gconfd-2
        |-gdm---gdm-simple-slav---Xorg
        |     |                 |-gdm-session-wor---gnome-session---gnome-setti+
        |     |                 |                 |               |-gnome-shell+++
        |     |                 |                 |               |-{dconf work+
        |     |                 |                 |               |-{gdbus}
        |     |                 |                 |               |-{gmain}
        |     |                 |                 |-{gdbus}
        |     |                 |                 |-{gmain}
        |     |                 |-{gdbus}
        |     |                 |-{gmain}
        |     |-{gdbus}
        |     |-{gmain}
[...]

-p オプションを指定すると、プロセス名に加えてプロセス ID が表示されるようになります。コマンドラインについても表示したい場合は、 -a を指定してください。

2.3.4 プロセスの一覧表示: top Edit source

top (Table Of Processes (プロセス表) の略) コマンドは、 2 秒間隔で更新されるプロセス表を表示します。プログラムを終了するには Q を押します。 -n 1 とパラメータを指定すると、プロセス表を一度だけ表示して終了します。下記は top -n 1 コマンドの出力例です:

> top -n 1
Tasks: 128 total,   1 running, 127 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.4 us,  1.2 sy,  0.0 ni, 96.3 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   1535508 total,   699948 used,   835560 free,      880 buffers
KiB Swap:  1541116 total,        0 used,  1541116 free.   377000 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
    1 root      20   0  116292   4660   2028 S 0.000 0.303   0:04.45 systemd
    2 root      20   0       0      0      0 S 0.000 0.000   0:00.00 kthreadd
    3 root      20   0       0      0      0 S 0.000 0.000   0:00.07 ksoftirqd+
    5 root       0 -20       0      0      0 S 0.000 0.000   0:00.00 kworker/0+
    6 root      20   0       0      0      0 S 0.000 0.000   0:00.00 kworker/u+
    7 root      rt   0       0      0      0 S 0.000 0.000   0:00.00 migration+
    8 root      20   0       0      0      0 S 0.000 0.000   0:00.00 rcu_bh
    9 root      20   0       0      0      0 S 0.000 0.000   0:00.24 rcu_sched
   10 root      rt   0       0      0      0 S 0.000 0.000   0:00.01 watchdog/0
   11 root       0 -20       0      0      0 S 0.000 0.000   0:00.00 khelper
   12 root      20   0       0      0      0 S 0.000 0.000   0:00.00 kdevtmpfs
   13 root       0 -20       0      0      0 S 0.000 0.000   0:00.00 netns
   14 root       0 -20       0      0      0 S 0.000 0.000   0:00.00 writeback
   15 root       0 -20       0      0      0 S 0.000 0.000   0:00.00 kintegrit+
   16 root       0 -20       0      0      0 S 0.000 0.000   0:00.00 bioset
   17 root       0 -20       0      0      0 S 0.000 0.000   0:00.00 crypto
   18 root       0 -20       0      0      0 S 0.000 0.000   0:00.00 kblockd

既定では、出力は CPU の使用率 (%CPU 列) の降順に並んでいます。下記のキー入力を行うことで、並べ替えに使用する項目を変更することができます (CPU の使用率に戻したい場合は、 ShiftP を押します) :

ShiftM : 常駐メモリ ( RES )
ShiftN : プロセス ID ( PID )
ShiftT : CPU 時間 ( TIME+ )

その他の項目で並べ替えを行いたい場合は、 F を押し表示された項目から選んでください。並べ替えの順序を逆にしたい場合は、 ShiftR を押してください。

また、 -U UID のようにオプションを指定することで、特定のユーザに結びついているプロセスのみを監視することができます。なお、 UID はユーザの ID を表します。現在使用しているユーザのプロセスを表示したい場合は、 top -U $(id -u) と入力して実行してください。

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

iotop ユーティリティは、プロセスやスレッドごとの I/O 使用率を表示します。

注記
注記: iotop のインストールについて

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

iotop は一定のサンプリング期間内に行われた読み込みおよび書き込みの処理を、プロセスごとにまとめて表示します。スワップ領域の読み込みや I/O の完了待ちなどで消費されたプロセス時間の割合も表示することができます。また、各プロセスの I/O 優先度 (クラス/レベル) も表示されます。これに加えて、システム全体での読み込みおよび書き込みの処理を、インターフェイスの上部に表示します。

  • のキーを押すことで、並べ替える項目を選択することができます。

  • R を押すと並び順を逆にすることができます。

  • O を押すと、全てのプロセスおよびスレッドを表示するビュー (既定の表示) と、 I/O が実際に行われているもののみを表示するビューとの間を切り替えることができます (この機能は、コマンドラインに --only オプションを追加した場合に似た表示になります) 。

  • P を押すと、スレッド表示 (既定の表示) とプロセス表示との間を切り替えることができます (この機能は、コマンドラインに --only オプションを追加した場合に似た表示になります) 。

  • A を押すと、現在の I/O 帯域 (既定の表示) と iotop 起動時からの累積値表示との間を切り替えることができます (この機能は、コマンドラインに --only オプションを追加した場合に似た表示になります) 。

  • I を押すと、スレッドやプロセス内のスレッドに対して、優先順位を変更することができます。

  • Q を押すと iotop を終了することができます。

  • 上記以外のキーを押すと、強制的な更新処理を行います。

下記は iotop --only の出力例で、ここでは findemacs が動作しています:

# 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 tux         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 tux          0.00 B/s    3.89 K/s  0.00 %  0.04 % emacs

iotop コマンドはバッチモード ( -b ) でも動作させることができます。この場合、ファイルに出力して後から分析するような使い方をすることもできます。オプションの一覧について、詳しくは ( man 8 iotop ) で表示されるマニュアルページをお読みください。

2.3.6 プロセスの優先順位設定: nice および renice Edit source

カーネルはプロセスの優先順位 (nice レベル, niceness) を利用して、他のプロセスとの間の CPU 時間の調整を行います。プロセスの nice レベルが高いほど、割り当てられる CPU 時間は少なくなります。 nice レベルは -20 (最も低い nice レベル) から 19 までの間で指定します。また、負の値の nice レベルは、 root のみが設定可能です。

niceness レベルの調整は、長時間 CPU 時間を占有し続けるような処理で、特に時間的な制約のない処理を動作させるような場合に有用です。たとえば他の処理も同時に動作しているシステム内で、カーネルのコンパイル処理を行ったりするような場合が該当します。このような処理の nice レベルを上げることで、たとえば Web サーバの処理をより優先して動作させることができるようになります。

nice コマンドに何もパラメータを指定しないで実行すると、現在の niceness を表示することができます:

> nice
0

nice コマンド のようにしてコマンドを実行すると、そのコマンドを起動する際に nice レベルを 10 足して実行します。また、 nice -n レベル コマンド のように入力して実行すると、現在の nice レベルに指定したレベルを足して、コマンドを実行することができます。

動作中のプロセスに対して nice レベルを変更したい場合は、 renice レベル -p プロセス_ID のように入力して実行します。たとえば下記のようになります:

> renice +5 3266

特定のユーザが所有する全てのプロセスの nice レベルを変更したい場合は、 -u ユーザ のように指定して実行します。 プロセスグループを指定して nice レベルを変更する場合は、 -g プロセスグループ_ID のように入力して実行します。

2.4 メモリ Edit source

2.4.1 メモリ使用率の表示: free Edit source

free コマンドはメモリとスワップ領域の使用量を表示します。それぞれ空き/使用中のメモリとスワップ領域の詳細が出力されます:

> free
             total       used       free     shared    buffers     cached
Mem:      32900500   32703448     197052          0     255668    5787364
-/+ buffers/cache:   26660416    6240084
Swap:      2046972     304680    1742292

表示の単位を変更したい場合は、 -b (バイト単位), -k (キロバイト単位), -m (メガバイト単位), -g (ギガバイト単位) のように指定します。 -s 遅延時間 のようにオプションを指定すると、 遅延時間 で指定した時間ごとに更新を行って表示します。たとえば free -s 1.5 のように入力して実行すると、 1.5 秒間隔で更新して表示します。

2.4.2 詳細なメモリ使用率情報の取得: /proc/meminfo Edit source

free で出力されるメモリ使用率よりも詳しい情報を取得したい場合は、 /proc/meminfo ファイルをお使いください。このファイルは free コマンドも使用しているファイルです。 64 ビット環境での出力例を下記に示します。なお、 32 ビット環境ではメモリの管理方式が異なるため、出力が少し異なることに注意してください:

MemTotal:        1942636 kB
MemFree:         1294352 kB
MemAvailable:    1458744 kB
Buffers:             876 kB
Cached:           278476 kB
SwapCached:            0 kB
Active:           368328 kB
Inactive:         199368 kB
Active(anon):     288968 kB
Inactive(anon):    10568 kB
Active(file):      79360 kB
Inactive(file):   188800 kB
Unevictable:          80 kB
Mlocked:              80 kB
SwapTotal:       2103292 kB
SwapFree:        2103292 kB
Dirty:                44 kB
Writeback:             0 kB
AnonPages:        288592 kB
Mapped:            70444 kB
Shmem:             11192 kB
Slab:              40916 kB
SReclaimable:      17712 kB
SUnreclaim:        23204 kB
KernelStack:        2000 kB
PageTables:        10996 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     3074608 kB
Committed_AS:    1407208 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      145996 kB
VmallocChunk:   34359588844 kB
HardwareCorrupted:     0 kB
AnonHugePages:     86016 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       79744 kB
DirectMap2M:     2017280 kB

項目の意味は下記のとおりです:

MemTotal

搭載されているメモリ量です。

MemFree

未使用のメモリ量です。

MemAvailable

新しく起動するアプリケーションで、スワップ処理を行わずに確保できるメモリ量の見積値です。

Buffers

ファイルシステムのメタデータを含むメモリ内のバッファキャッシュ量です。

Cached

メモリ内のページキャッシュ量です。この量にはバッファキャッシュとスワップキャッシュが含まれていませんが、 Shmem のメモリ量は含まれています。

SwapCached

スワップアウトされたメモリに対するページキャッシュ量です。

Active , Active(anon) , Active(file)

どうしても必要な場合や明示的に指定されたりした場合以外には回収されることのない、使用中のメモリ量。 ActiveActive(anon)Active(file) の合計値です:

  • Active(anon) はスワップ領域に結びつけられているメモリ量です。この量には、コピーオンライト後のプライベート, 共有匿名マッピング, プライベートファイルページが含まれています。

  • Active(file) はファイルシステムに結びつけられているメモリ量です。

Inactive , Inactive(anon) , Inactive(file)

通常は真っ先に回収される、直近では未使用のメモリ量です。 InactiveInactive(anon)Inactive(file) の合計値です:

  • Inactive(anon) はスワップ領域に結びつけられているメモリ量です。この量には、コピーオンライト後のプライベート, 共有匿名マッピング, プライベートファイルページが含まれています。

  • Inactive(file) はファイルシステムに結びつけられているメモリ量です。

Unevictable

回収することのできない (たとえば Mlocked されているものや RAM ディスクとして使用されているものなど) メモリ量です。

Mlocked

mlock システムコールに結びつけられているメモリ量です。 mlock はプロセスに対して、仮想メモリをどの物理メモリに割り当てるのかを指定できる仕組みです。しかしながら、 mlock はその配置を保証できるものではありません。

SwapTotal

スワップ領域の量です。

SwapFree

未使用のスワップ領域の量です。

Dirty

ディスクに書き込むべきデータを保持していて、ディスクへの書き込みを待っているメモリの量です。 Dirty に指定されたデータはアプリケーション側から明示的に同期を行うか、しばらくしてカーネルが同期を行うことになります。この Dirty 領域が大きい場合、ディスクへの書き込みに時間を要することが考えられます。また、任意の時点での Dirty 領域のサイズは、 sysctl パラメータの vm.dirty_ratio もしくは vm.dirty_bytes で設定することができます (詳しくは 15.1.5項 「ライトバック」 をお読みください) 。

Writeback

現在ディスクに書き込もうとしているメモリの量です。

Mapped

mmap システムコールで確保されたメモリ量です。

Shmem

IPC データや tmpfs 、および共有匿名メモリなどのプロセス間共有メモリの量です。

Slab

カーネルの内部データ構造向けの割り当て済みメモリ量です。

SReclaimable

キャッシュ (inode, dentry ほか) などの回収可能な Slab セクションの量です。

SUnreclaim

回収することのできない Slab セクションの量です。

KernelStack

システムコールを介して、アプリケーションが使用しているカーネル領域メモリの量です。

PageTables

全てのプロセスのページテーブル専用メモリ量です。

NFS_Unstable

既にサーバ宛には送信されたものの、まだコミットされていない NFS ページの量です。

Bounce

ブロックデバイスのバウンスバッファ向けに使用されているメモリ量です。

WritebackTmp

一時的な書き戻しバッファのために FUSE が使用するメモリ量です。

CommitLimit

オーバーコミット比率設定をベースにした、システムで利用できるメモリ量です。この項目は、厳密なオーバーコミットアカウンティングが有効な場合にのみ強制されます。

Committed_AS

現在の負荷量で、最悪の場合に必要となるメモリ量 (物理メモリとスワップ) の合計見積値です。

VmallocTotal

割り当て済みのカーネル仮想アドレス領域の量です。

VmallocUsed

カーネルの仮想アドレス領域のうち、使用中の量です。

VmallocChunk

利用可能なカーネルの仮想アドレス領域のうち、最も大きく連続したブロックの量です。

HardwareCorrupted

障害の発生しているメモリの量です (ECC メモリを使用している場合にのみ検出可能です) 。

AnonHugePages

ユーザスペースのページテーブルにマップされている、匿名の hugepage の量です。これらは特にプロセス側から要求されることなく透過的に割り当てられるため、 透過型 hugepage としても知られています。

HugePages_Total

SHM_HUGETLBMAP_HUGETLB 、もしくは hugetlbfs ファイルシステムを介して使用することのできる、事前割り当て型の hugepage の量です。 /proc/sys/vm/nr_hugepages で定義されています。

HugePages_Free

利用可能な hugepage の量です。

HugePages_Rsvd

コミット済みの hugepage の量です。

HugePages_Surp

HugePages_Total を越えて使用することのできる hugepage ( surplus ) の量です。 /proc/sys/vm/nr_overcommit_hugepages で定義されています。

Hugepagesize

hugepage のサイズです。 AMD64/Intel 64 の既定値は 2048 KB です。

DirectMap4k など

指定のサイズ (例: 4 kB) でページにマップされたカーネルメモリの量です。

2.4.3 プロセスのメモリ使用率状況の表示: smaps Edit source

topps コマンドのような標準ツールを使用しても、特定のプロセスがどれだけのメモリを使用しているのかを正確に知るのは困難です。正確なデータを必要とする場合は、カーネルバージョン 2.6.14 で導入された smaps サブシステムをお使いください。 smaps サブシステムでは、プロセスごとに /proc/プロセス_ID/smaps ファイルが提供されます。ここには、その時点で特定のプロセスが使用していたメモリ量のうち、クリーンなものとダーティなものの両方を表示することができます。また、共有メモリとプライベートメモリを区別して表示しますので、他のプロセスとは共有していないメモリ量を正確に知ることができます。詳しくは /usr/src/linux/Documentation/filesystems/proc.txt ファイル (英語, kernel-source パッケージをインストールする必要があります) をお読みください。

smaps は読みにくい出力形態になってしまっています。そのため、定期的な監視としては使用せず、プロセスを特定してからお読みになることをお勧めします。

2.4.4 numaTOP Edit source

numaTOP は NUMA (Non-uniform Memory Access) システム向けのツールです。このツールは、 NUMA システムのリアルタイム分析機能を提供して、 NUMA に関する性能ボトルネックを発見することができるツールです。

一般的には、 numaTOP はローカリティの低い (ローカルメモリよりもリモートメモリを多く使用している) プロセスやスレッドを識別したり、調査したりすることができます。これは、それぞれ Remote Memory Accesses (RMA) と Local Memory Accesses (LMA) の数値と、 RMA/LMA の比率を分析することで行います。

numaTOP は PowerPC プロセッサのほか、 Intel Xeon プロセッサのうち 5500 シリーズ, 6500/7500 シリーズ, 5600 シリーズ, E7-x8xx シリーズ, E5-16xx/24xx/26xx/46xx シリーズでそれぞれ動作します。

numaTOP は公式のソフトウエアリポジトリ内に用意されています。 sudo zypper in numatop コマンドを実行してインストールしてください。 numaTOP を起動するには numatop コマンドを実行してください。 numaTOP の機能や使用方法に関する概要を知りたい場合は、 man numatop コマンドを実行してください。

2.5 ネットワーク Edit source

ヒント
ヒント: トラフィックシェイピングについて

ネットワーク帯域が期待よりも狭いと感じた場合、まずはお使いのネットワークセグメント内で、トラフィックシェイピングルールが有効化されているかどうかをご確認ください。

2.5.1 基本的なネットワーク設定: ip Edit source

ip はシステム内のネットワークインターフェイスを設定したり制御したりすることのできるパワフルなツールです。ネットワークインターフェイスの基本的な統計情報なども取得することができます。たとえばインターフェイスが動作しているかどうかや、エラーの数、廃棄されたパケットやコリジョン (衝突) などの数を表示することができます。

何もパラメータを指定せずに ip コマンドを実行すると、ヘルプメッセージが表示されます。ネットワークインターフェイスの一覧を表示したい場合は、 ip addr show (もしくは省略形で ip a) と入力して実行してください。 ip addr show up と入力して実行すると、動作中のネットワークインターフェイスのみを表示することができます。また、 ip -s link show デバイス名 のように入力して実行すると、指定したインターフェイスの統計情報のみを表示します:

# ip -s link show br0
6: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT
    link/ether 00:19:d1:72:d4:30 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    6346104756 9265517  0       10860   0       0
    TX: bytes  packets  errors  dropped carrier collsns
    3996204683 3655523  0       0       0       0

ip コマンドはインターフェイスの表示 ( link ) のほか、ルーティングテーブルの表示 ( route ) など、多数の機能が用意されています。詳しくは man 8 ip をお読みください。

# ip route
default via 192.168.2.1 dev eth1
192.168.2.0/24 dev eth0  proto kernel  scope link  src 192.168.2.100
192.168.2.0/24 dev eth1  proto kernel  scope link  src 192.168.2.101
192.168.2.0/24 dev eth2  proto kernel  scope link  src 192.168.2.102
# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 52:54:00:44:30:51 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 52:54:00:a3:c1:fb brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 52:54:00:32:a4:09 brd ff:ff:ff:ff:ff:ff

2.5.2 プロセスごとのネットワーク使用率の表示: nethogs Edit source

たとえばネットワークトラフィックが急激に増加したような場合、その原因となるアプリケーションを素早く見つけることができたほうが都合のよいことがあります。 nethogs コマンドは top コマンドに似た設計で、それぞれのプロセスが処理している送受信トラフィックを表示することができます:

PID   USER  PROGRAM                                DEV   SENT   RECEIVED
27145 root   zypper                                eth0  5.719  391.749 KB/sec
?     root   ..0:113:80c0:8080:10:160:0:100:30015        0.102    2.326 KB/sec
26635 tux    /usr/lib64/firefox/firefox            eth0  0.026    0.026 KB/sec
?     root   ..0:113:80c0:8080:10:160:0:100:30045        0.000    0.021 KB/sec
?     root   ..0:113:80c0:8080:10:160:0:100:30045        0.000    0.018 KB/sec
?     root   ..0:113:80c0:8080:10:160:0:100:30015        0.000    0.018 KB/sec
?     root   ..0:113:80c0:8080:10:160:0:100:30045        0.000    0.017 KB/sec
?     root   ..0:113:80c0:8080:10:160:0:100:30045        0.000    0.017 KB/sec
?     root   ..0:113:80c0:8080:10:160:0:100:30045        0.069    0.000 KB/sec
?     root   unknown TCP                                 0.000    0.000 KB/sec

TOTAL                                                  5.916  394.192 KB/sec

top コマンドと同様に、 nethogs コマンドも対話的にコマンドを入力することができます:

M : 表示モードの切り替え (kb/s, kb, b, mb)
R : RECEIVED (受信) で並べ替え
S : SENT (送信) で並べ替え
Q : 終了

2.5.3 詳細なイーサネットカードの設定: ethtool Edit source

ethtool はお使いのイーサネットデバイスの詳細な要素を表示したり、変更したりすることのできるツールです。既定では、指定したデバイスに対する現在の設定値を表示します。

# ethtool eth0
Settings for eth0:
 Supported ports: [ TP ]
 Supported link modes:   10baseT/Half 10baseT/Full
                         100baseT/Half 100baseT/Full
                         1000baseT/Full
 Supports auto-negotiation: Yes
 Advertised link modes:  10baseT/Half 10baseT/Full
                         100baseT/Half 100baseT/Full
                         1000baseT/Full
 Advertised pause frame use: No
[...]
 Link detected: yes

下記の表には、様々な情報を取得するための ethtool オプションを示しています:

表 2.1: ethtool の問い合わせオプションの一覧

ethtool のオプション

意味

-a

Pause パラメータの情報の表示

-c

Interrupt Coalescing の情報の表示

-g

Rx/Tx (送信/受信) の Ring パラメータ情報の表示

-i

対応するドライバに関する情報の表示

-k

オフロード設定の表示

-S

NIC およびドライバ固有の統計情報の表示

2.5.4 ネットワーク状態の表示: ss Edit source

ss はソケットの統計情報を表示するコマンドで、以前に用いられていた netstat コマンドを置き換えるものです。全ての接続を表示したい場合は、何もパラメータを指定せずに ss を実行してください:

# ss
Netid  State      Recv-Q Send-Q   Local Address:Port       Peer Address:Port
u_str  ESTAB      0      0                    * 14082                 * 14083
u_str  ESTAB      0      0                    * 18582                 * 18583
u_str  ESTAB      0      0                    * 19449                 * 19450
u_str  ESTAB      0      0      @/tmp/dbus-gmUUwXABPV 18784           * 18783
u_str  ESTAB      0      0      /var/run/dbus/system_bus_socket 19383 * 19382
u_str  ESTAB      0      0      @/tmp/dbus-gmUUwXABPV 18617           * 18616
u_str  ESTAB      0      0      @/tmp/dbus-58TPPDv8qv 19352           * 19351
u_str  ESTAB      0      0                    * 17658                 * 17657
u_str  ESTAB      0      0                    * 17693                 * 17694
[..]

現在開いている全てのネットワークポートを表示したい場合は、下記のように実行してください:

# ss -l
Netid  State      Recv-Q Send-Q      Local Address:Port  Peer Address:Port
nl     UNCONN     0      0                 rtnl:4195117                  *
nl     UNCONN     0      0       rtnl:wickedd-auto4/811                  *
nl     UNCONN     0      0       rtnl:wickedd-dhcp4/813                  *
nl     UNCONN     0      0                 rtnl:4195121                  *
nl     UNCONN     0      0                 rtnl:4195115                  *
nl     UNCONN     0      0       rtnl:wickedd-dhcp6/814                  *
nl     UNCONN     0      0                  rtnl:kernel                  *
nl     UNCONN     0      0             rtnl:wickedd/817                  *
nl     UNCONN     0      0                 rtnl:4195118                  *
nl     UNCONN     0      0                rtnl:nscd/706                  *
nl     UNCONN     4352   0              tcpdiag:ss/2381                  *
[...]

ネットワーク接続を表示する際、特定のソケットタイプに限定することもできます。それぞれ TCP ( -t ) もしくは UDP ( -u ) などを指定してください。また、 -p オプションを指定すると、それぞれのソケットが属するプロセス ID と、その名前を表示することができます。

下記の例では、全ての TCP 接続とそれに結びつけられたプログラムを表示しています。 -a オプションは、確立済みの全ての接続 (待ち受け中のものを含む) を表示するためのオプションです。 -p オプションを指定すると、それぞれのソケットが属するプロセス ID と、その名前を表示することができます。

# ss -t -a -p
State    Recv-Q Send-Q  Local Address:Port   Peer Address:Port
LISTEN   0      128                  *:ssh                 *:*  users:(("sshd",1551,3))
LISTEN   0      100         127.0.0.1:smtp                 *:*  users:(("master",1704,13))
ESTAB    0      132      10.120.65.198:ssh  10.120.4.150:55715  users:(("sshd",2103,5))
LISTEN   0      128                 :::ssh                :::*  users:(("sshd",1551,4))
LISTEN   0      100               ::1:smtp                :::*  users:(("master",1704,14))

2.6 /proc ファイルシステム Edit source

/proc ファイルシステムは擬似的なファイルシステムで、仮想的なファイルの形式で、カーネル内の様々な情報にアクセスすることができます。たとえば CPU の種類を表示したい場合は、下記のように実行します:

> cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 30
model name      : Intel(R) Core(TM) i5 CPU         750  @ 2.67GHz
stepping        : 5
microcode       : 0x6
cpu MHz         : 1197.000
cache size      : 8192 KB
physical id     : 0
siblings        : 4
core id         : 0
cpu cores       : 4
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 11
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida dtherm tpr_shadow vnmi flexpriority ept vpid
bogomips        : 5333.85
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:
[...]
ヒント
ヒント: 詳細なプロセッサ情報の取得について

AMD64/Intel 64 アーキテクチャでプロセッサの詳細情報を取得したい場合は、 x86info コマンドをお使いいただいてもかまいません。

割り込みの割り当てと使用状況を確認するには、下記のように実行します:

> cat /proc/interrupts
           CPU0       CPU1       CPU2       CPU3
  0:        121          0          0          0   IO-APIC-edge      timer
  8:          0          0          0          1   IO-APIC-edge      rtc0
  9:          0          0          0          0   IO-APIC-fasteoi   acpi
 16:          0      11933          0          0   IO-APIC-fasteoi   ehci_hcd:+
 18:          0          0          0          0   IO-APIC-fasteoi   i801_smbus
 19:          0     117978          0          0   IO-APIC-fasteoi   ata_piix,+
 22:          0          0    3275185          0   IO-APIC-fasteoi   enp5s1
 23:     417927          0          0          0   IO-APIC-fasteoi   ehci_hcd:+
 40:    2727916          0          0          0  HPET_MSI-edge      hpet2
 41:          0    2749134          0          0  HPET_MSI-edge      hpet3
 42:          0          0    2759148          0  HPET_MSI-edge      hpet4
 43:          0          0          0    2678206  HPET_MSI-edge      hpet5
 45:          0          0          0          0   PCI-MSI-edge      aerdrv, P+
 46:          0          0          0          0   PCI-MSI-edge      PCIe PME,+
 47:          0          0          0          0   PCI-MSI-edge      PCIe PME,+
 48:          0          0          0          0   PCI-MSI-edge      PCIe PME,+
 49:          0          0          0        387   PCI-MSI-edge      snd_hda_i+
 50:     933117          0          0          0   PCI-MSI-edge      nvidia
NMI:       2102       2023       2031       1920   Non-maskable interrupts
LOC:         92         71         57         41   Local timer interrupts
SPU:          0          0          0          0   Spurious interrupts
PMI:       2102       2023       2031       1920   Performance monitoring int+
IWI:      47331      45725      52464      46775   IRQ work interrupts
RTR:          2          0          0          0   APIC ICR read retries
RES:     472911     396463     339792     323820   Rescheduling interrupts
CAL:      48389      47345      54113      50478   Function call interrupts
TLB:      28410      26804      24389      26157   TLB shootdowns
TRM:          0          0          0          0   Thermal event interrupts
THR:          0          0          0          0   Threshold APIC interrupts
MCE:          0          0          0          0   Machine check exceptions
MCP:         40         40         40         40   Machine check polls
ERR:          0
MIS:          0

実行ファイルとライブラリのアドレス割り当てに関する情報は、 maps ファイル内に含まれています:

> 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 ファイルシステムを利用することで、数多くの情報を取得することができます。主なファイルとその内容を下記に示します:

/proc/devices

利用可能なデバイスに関する情報

/proc/modules

読み込み済みのカーネルモジュール

/proc/cmdline

カーネルのコマンドライン

/proc/meminfo

メモリの使用率に関する詳細情報

/proc/config.gz

gzip 形式で圧縮された、現在動作中のカーネルの設定ファイル

/proc/PID/

現在動作中のプロセスに関する情報が含まれています。ここで PID には、プロセスのプロセス ID を代入します。自分自身のプロセスを参照したい場合は、 /proc/self/ で参照することができます。

さらに詳しい情報をご希望の場合は、 /usr/src/linux/Documentation/filesystems/proc.txt ファイル (英語, kernel-source パッケージをインストールする必要があります) をお読みください。

2.6.1 procinfo Edit source

/proc ファイルシステム内で取得できる情報から主なものを抜き出すためのコマンドとして、 procinfo が用意されています:

> procinfo
Linux 3.11.10-17-desktop (geeko@buildhost) (gcc 4.8.1 20130909) #1 4CPU [jupiter.example.com]

Memory:      Total        Used        Free      Shared     Buffers      Cached
Mem:       8181908     8000632      181276           0       85472     2850872
Swap:     10481660        1576    10480084

Bootup: Mon Jul 28 09:54:13 2014    Load average: 1.61 0.85 0.74 2/904 25949

user  :       1:54:41.84  12.7%  page in :    2107312  disk 1:    52212r   20199w
nice  :       0:00:00.46   0.0%  page out:    1714461  disk 2:    19387r   10928w
system:       0:25:38.00   2.8%  page act:     466673  disk 3:      548r      10w
IOwait:       0:04:16.45   0.4%  page dea:     272297
hw irq:       0:00:00.42   0.0%  page flt:  105754526
sw irq:       0:01:26.48   0.1%  swap in :          0
idle  :      12:14:43.65  81.5%  swap out:        394
guest :       0:02:18.59   0.2%
uptime:       3:45:22.24         context :   99809844

irq  0:       121 timer                 irq 41:   3238224 hpet3
irq  8:         1 rtc0                  irq 42:   3251898 hpet4
irq  9:         0 acpi                  irq 43:   3156368 hpet5
irq 16:     14589 ehci_hcd:usb1         irq 45:         0 aerdrv, PCIe PME
irq 18:         0 i801_smbus            irq 46:         0 PCIe PME, pciehp
irq 19:    124861 ata_piix, ata_piix, f irq 47:         0 PCIe PME, pciehp
irq 22:   3742817 enp5s1                irq 48:         0 PCIe PME, pciehp
irq 23:    479248 ehci_hcd:usb2         irq 49:       387 snd_hda_intel
irq 40:   3216894 hpet2                 irq 50:   1088673 nvidia

全ての情報を表示するには -a オプションを指定してください。また、 -nN とオプションを指定すると、 N 秒間隔で情報を更新し続けることができます。この場合、 Q を押すと終了することができます。

既定では累積値を表示しますが、 -d を指定すると差分値を表示することもできます。たとえば procinfo -dn5 とオプションを指定すると、直近の 5 秒間に変化した値が表示されます。

2.6.2 システム制御パラメータ: /proc/sys/ Edit source

システム制御パラメータを使用することで、 Linux カーネルのパラメータを動作中に変更することができます。これらのファイルは /proc/sys/ ディレクトリ内に存在し、 sysctl コマンドで表示および変更を行うことができます。全てのパラメータを一覧表示するには、 sysctl -a と入力して実行してください。また、特定の値のみを表示したい場合は、 sysctl パラメータ名 と入力して実行します。

パラメータは分野ごとに分類されていて、 sysctl 分類名 のように入力して実行するか、もしくは対応するディレクトリ内の一覧を表示することで、確認することができます。主な分類の一覧を下記に示します。なお、詳細情報を説明しているファイルは、いずれも英語のみの提供で、 kernel-source パッケージをインストールしておく必要があります。

sysctl dev ( /proc/sys/dev/ )

デバイス固有の情報が含まれています。

sysctl fs ( /proc/sys/fs/ )

使用済みのファイルハンドルやクォータ、その他のファイルシステム指向のパラメータが含まれています。詳しくは /usr/src/linux/Documentation/sysctl/fs.txt ファイルをお読みください。

sysctl kernel ( /proc/sys/kernel/ )

タスクスケジューラやシステムの共有メモリ、そしてその他のカーネル関連のパラメータが含まれています。詳しくは /usr/src/linux/Documentation/sysctl/kernel.txt ファイルをお読みください。

sysctl net ( /proc/sys/net/ )

ネットワークブリッジのほか、一般的なネットワークパラメータが含まれています (主に ipv4/ サブディレクトリ内にあります) 。詳しくは /usr/src/linux/Documentation/sysctl/net.txt ファイルをお読みください。

sysctl vm ( /proc/sys/vm/ )

このパス内に存在するファイルには、仮想メモリやスワップ処理、キャッシュ処理に関するパラメータが含まれています。詳しくは /usr/src/linux/Documentation/sysctl/vm.txt ファイルをお読みください。

システムを再起動するまでの間、パラメータを設定したい場合は、 sysctl -w パラメータ名 = 設定値 のように入力して実行してください。また、パラメータ設定を恒久的に行いたい場合は、 /etc/sysctl.conf ファイル内に パラメータ名 = 設定値 の形式で行を追加してください。

2.7 ハードウエア情報 Edit source

2.7.1 PCI リソースの表示: lspci Edit source

注記
注記: PCI 情報へのアクセスについて

ほとんどの環境では、コンピュータの PCI 設定にアクセスするにあたって root 権限が必要となります。

lspci コマンドは、 PCI リソースの一覧を表示します:

# 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 オプションを指定すると、さらに詳しい情報を表示することができます:

# 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 ファイルから取得しています。そのため、このファイル内に書かれていないデバイスについては、 Unknown device (未知のデバイス) として表示されます。

-vv パラメータを指定すると、プログラムから問い合わせることのできる全ての情報を出力することができます。また、文字ではなく数値で表示したい場合は、 -n オプションをお使いください。

2.7.2 USB デバイスの一覧表示: lsusb Edit source

lsusb コマンドは USB デバイスの一覧を表示します。 -v オプションを指定すると、さらに詳しい情報を表示することができます。詳しい情報は /proc/bus/usb/ 内から取得します。下記は USB バスにハブと USB メモリ、ハードディスクとマウスがそれぞれ接続された環境での、 lsusb の出力例です。

# 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.7.3 サーマルサブシステムの監視とチューニング: tmon Edit source

tmon は複雑なサーマル (温度管理) サブシステムを可視化したり、チューニングしたりテストしたりするためのツールです。何もパラメータを指定しないで起動すると、 tmon は監視モードで動作します:

┌──────THERMAL ZONES(SENSORS)──────────────────────────────┐
│Thermal Zones:                 acpitz00                   │
│Trip Points:                   PC                         │
└──────────────────────────────────────────────────────────┘
┌─────────── COOLING DEVICES ──────────────────────────────┐
│ID  Cooling Dev   Cur    Max   Thermal Zone Binding       │
│00    Processor     0      3   ││││││││││││               │
│01    Processor     0      3   ││││││││││││               │
│02    Processor     0      3   ││││││││││││               │
│03    Processor     0      3   ││││││││││││               │
│04 intel_powerc    -1     50   ││││││││││││               │
└──────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────┐
│                         10        20        30        40 │
│acpitz 0:[  8][>>>>>>>>>P9                    C31         │
└──────────────────────────────────────────────────────────┘
┌────────────────── CONTROLS ──────────────────────────────┐
│PID gain: kp=0.36 ki=5.00 kd=0.19 Output 0.00             │
│Target Temp: 65.0C, Zone: 0, Control Device: None         │
└──────────────────────────────────────────────────────────┘

Ctrl-c - Quit   TAB - Tuning

データの解釈方法に関して、および温度データの記録方法に関して、そして tmon で冷却デバイスやセンサーをテストしたりチューニングしたりする方法について、詳しくは man 8 tmon にあるマニュアルページをお読みください。なお、 tmon パッケージは既定ではインストールされません。

2.7.4 MCELog: マシンチェック例外 (MCE; Machine Check Exceptions) Edit source

注記
注記: 対応アーキテクチャについて

このツールは AMD64/Intel 64 システム向けにのみ提供されています。

mcelog パッケージは、 I/O や CPU 、メモリエラーなどのハードウエアエラーが発生した際に発せられるマシンチェック例外 (Machine Check Exceptions (MCE)) を記録し、解釈/翻訳するためのパッケージです。これに加えて mcelog は、不正なページのオフライン化や、キャッシュエラーが発生した際に自動的にコアをオフライン化するなどの処理も行います。以前のバージョンでは cron ジョブとして 1 時間に 1 回動作していましたが、現在は mcelog デーモンの形で、ハードウエアエラーを即時に処理するようになっています。

注記
注記: AMD Scalable MCA のサポートについて

openSUSE Leap では AMD 社の Scalable Machine Check Architecture (Scalable MCA) に対応するようになっています。 Scalable MCA は AMD 社の Zen プロセッサでハードウエアエラー報告の機能を改善するための仕組みで、エラー報告やその後の解析を支援するために MCA バンク内に保存される情報を記録しています。

mcelog は MCA メッセージを捕捉 (rasdaemondmesg でも MCA メッセージを捕捉することができます) 。詳しくは Processor ProgrammingReference (PPR) for AMD Family 17h Model 01h, Revision B1 Processors ( https://developer.amd.com/wordpress/media/2017/11/54945_PPR_Family_17h_Models_00h-0Fh.pdf ) 内にある第 3.1 章:Machine Check Architecture (英語) をお読みください。

mcelog は /etc/mcelog/mcelog.conf ファイルで設定を行います。設定オプションは man mcelog 内や https://mcelog.org/ 内で説明されています。なお下記の例は、既定のファイルに対する変更箇所のみを示しています:

daemon = yes
filter = yes
filter-memory-errors = yes
no-syslog = yes
logfile = /var/log/mcelog
run-credentials-user = root
run-credentials-group = nobody
client-group = root
socket-path = /var/run/mcelog-client

mcelog サービスは既定では有効化されていません。 YaST システムサービスエディタを使用するか、下記のコマンドラインを実行することで、有効化することができます:

# systemctl enable mcelog
# systemctl start mcelog

2.7.5 AMD64/Intel 64: dmidecode: DMI テーブルデコーダ Edit source

dmidecode はハードウエアのシリアル番号や BIOS のリビジョンなどを含む、マシンの DMI テーブルを表示することのできるツールです。

# dmidecode
# dmidecode 2.12
SMBIOS 2.5 present.
27 structures occupying 1298 bytes.
Table at 0x000EB250.

Handle 0x0000, DMI type 4, 35 bytes
Processor Information
        Socket Designation: J1PR
        Type: Central Processor
        Family: Other
        Manufacturer: Intel(R) Corporation
        ID: E5 06 01 00 FF FB EB BF
        Version: Intel(R) Core(TM) i5 CPU         750  @ 2.67GHz
        Voltage: 1.1 V
        External Clock: 133 MHz
        Max Speed: 4000 MHz
        Current Speed: 2667 MHz
        Status: Populated, Enabled
        Upgrade: Other
        L1 Cache Handle: 0x0004
        L2 Cache Handle: 0x0003
        L3 Cache Handle: 0x0001
        Serial Number: Not Specified
        Asset Tag: Not Specified
        Part Number: Not Specified
[..]

2.8 ファイルとファイルシステム Edit source

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

file は指定したファイル (複数可) の種類を判別します。その際、 /usr/share/misc/magic ファイル内に書かれた情報を使用します。

> 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 が圧縮ファイル内を調査するようにすることができます:

> file /usr/share/man/man1/file.1.gz
/usr/share/man/man1/file.1.gz: gzip compressed data, from Unix, max compression
> 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 タイプを表示するようになります。

> file -i /usr/share/misc/magic
/usr/share/misc/magic: text/plain charset=utf-8

2.8.2 ファイルシステムと使用率の表示: mount , df , du Edit source

mount コマンドは、どのファイルシステム (デバイスおよび種類) がどこにマウントされているのかを表示します:

# 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 ) オプションを指定すると、人間にとってわかりやすい、単位付きの表示に切り替えることができます。

> 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 を指定することで、人間にとってわかりやすい、単位付きの表示に切り替えることができます。

> du -sh /opt
192M    /opt

2.8.3 ELF 形式バイナリに対する追加情報 Edit source

バイナリファイルの内容を表示したい場合は、 readelf ユーティリティを使用します。このプログラムは、 ELF 形式であれば、どのアーキテクチャ向けのファイルであっても読み込むことができます:

> readelf --file-header /bin/ls
ELF Header:
  マジック:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
  クラス:                            ELF64
  データ:                            2's complement, little endian
  バージョン:                        1 (current)
  OS/ABI:                            UNIX - System V
  ABI バージョン:                    0
  型:                                EXEC (Executable file)
  マシン:                            Advanced Micro Devices X86-64
  バージョン:                        0x1
  エントリポイントアドレス:           0x402540
  プログラムヘッダ始点:               64 (bytes into file)
  セクションヘッダ始点:               95720 (bytes into file)
  フラグ:                            0x0
  このヘッダのサイズ:                 64 (bytes)
  プログラムヘッダサイズ:             56 (bytes)
  プログラムヘッダ数:                 9
  セクションヘッダサイズ:             64 (bytes)
  セクションヘッダ数:                 32
  セクションヘッダ文字列表索引:        31

2.8.4 ファイル属性の表示: stat Edit source

stat コマンドはファイルの属性を表示します:

> 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

--file-system パラメータを指定すると、指定したファイルが存在するファイルシステム内での情報を表示することができます:

> 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 ユーザ情報 Edit source

2.9.1 ユーザがアクセスしているファイルの表示: fuser Edit source

どのプロセスやユーザが、どのファイルにアクセスしているのかを知りたいような場合があります。たとえば /mnt をマウント解除したいような場合がそれにあたります。 umount コマンドが "device is busy" と出力してマウント解除に失敗した場合、 fuser コマンドを使用することで、どのプロセスがデバイスにアクセスしているのかがわかります:

> fuser -v /mnt/*

                     USER        PID ACCESS COMMAND
/mnt/notes.txt       tux    26597 f....  less

あとは less プロセスが終了するのを待つか、もしくは強制終了させることで、ファイルシステムのマウントを解除できるようになります。なお、 fuser コマンドに -k オプションを指定すると、ファイルにアクセスしているプロセスを終了させることができます。

2.9.2 ユーザの活動状況表示: w Edit source

w コマンドを使用すると、現在システムに誰がログインしているのかと、そのユーザが今何をしているのかを知ることができます。たとえば下記のようになります:

> w
 16:00:59 up 1 day,  2:41,  3 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
tux      :0       console          Wed13   ?xdm?   8:15   0.03s /usr/lib/gdm/gd
tux      console  :0               Wed13   26:41m  0.00s  0.03s /usr/lib/gdm/gd
tux      pts/0    :0               Wed13   20:11   0.10s  2.89s /usr/lib/gnome-

-f オプションを指定すると、リモートからアクセスしている場合のアクセス元の表示を切り替えることもできます。

2.10 日付と時刻 Edit source

2.10.1 time による時間測定 Edit source

コマンドで使用した時間を計測したい場合は、 time ユーティリティをお使いください。このユーティリティは、 bash の内蔵コマンドとしても用意されているほか、純粋なプログラム ( /usr/bin/time ) としても提供されています。

> time find . > /dev/null

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

1

コマンドが起動して終了するまでに経過した実時間を表しています。

2

times システムコールで報告された、ユーザ部分の CPU 時間を表しています。

3

times システムコールで報告された、システム部分の CPU 時間を表しています。

/usr/bin/time コマンドの場合は、出力をより詳しく行うことができます。読みやすい表示をご希望の場合は、 -v オプションを指定してください。

/usr/bin/time -v find . > /dev/null
        Command being timed: "find ."
        User time (seconds): 0.24
        System time (seconds): 2.08
        Percent of CPU this job got: 25%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 0:09.03
        Average shared text size (kbytes): 0
        Average unshared data size (kbytes): 0
        Average stack size (kbytes): 0
        Average total size (kbytes): 0
        Maximum resident set size (kbytes): 2516
        Average resident set size (kbytes): 0
        Major (requiring I/O) page faults: 0
        Minor (reclaiming a frame) page faults: 1564
        Voluntary context switches: 36660
        Involuntary context switches: 496
        Swaps: 0
        File system inputs: 0
        File system outputs: 0
        Socket messages sent: 0
        Socket messages received: 0
        Signals delivered: 0
        Page size (bytes): 4096
        Exit status: 0

2.11 データのグラフ化: RRDtool Edit source

コンピュータシステムを扱っていると、様々なデータを採取できることがわかります。たとえばコンピュータの温度の変化やネットワークインターフェイスが送信もしくは受信したデータ量などがあります。 RRDtool では、そのようなデータを詳細に保存し、カスタマイズ可能なグラフとして可視化する機能を提供しています。

RRDtool はほとんどの Unix プラットフォームや Linux ディストリビューション向けに提供されています。 openSUSE® Leap でも RRDtool をご利用いただけます。 YaST からインストールを行うか、もしくは root で下記のように入力して実行してください:

zypper install rrdtool

ヒント
ヒント: バインディングについて

RRDtool には Perl, Python, Ruby, PHP などのバインディングが用意されています。そのため、お使いのスクリプト言語を利用して、独自の監視スクリプトを作成することができます。

2.11.1 RRDtool の仕組み Edit source

RRDtool は Round Robin Database tool の略で、 ラウンドロビン型のデータベースツール という意味です。 ラウンドロビン とは 持ち回り のような意味で、一定量のデータを保持し続け、古いものから順に破棄していく仕組みを意味します。そのため、データには始まりも終わりもありません。 RRD tool では、このようなラウンドロビン型のデータベースを利用してデータを保存し、読み込みを行います。

上述のとおり、 RRDtool は時間が経過するごとに変化していくようなデータを扱うよう設計されています。よくある使用例としては、測定データを繰り返し読み取ることのできるセンサー (温度や速度など) からデータを採取して、特定の形式でグラフ化するなどの例が考えられます。このようなデータであれば、 RRDtool は完璧に動作しますし、データの処理や必要な出力の作成も容易に行うことができます。

データを自動的に採取できないようなデータや、定期的に採取できないようなデータに対しては、 RRDtool にデータを与える際、特定の書式を使用する必要があります。また、このようなデータの場合、 RRDtool を手作業で動作させる必要があるかもしれません。

下記は RRDtool の基本的な使い方を説明するための例です。ここでは RRDtool における 3 つのフェーズ (データベースの作成, 測定データの更新, 測定データの可視化) を示しています。

2.11.2 実際の例 Edit source

たとえば Linux システム内において随時変化する、メモリの使用率について情報を収集し、可視化したいと考えたとします。わかりやすいように、今回は 4 秒間隔で 40 秒間にわたって、空きメモリ量を計測するものとします。また、メモリを大きく使用するアプリケーションを 3 種類 (Firefox Web ブラウザ, Evolution 電子メールクライアント, Eclipse 開発フレームワーク) 動作させて終了し、メモリの使用率を変化させてみます。

2.11.2.1 データの収集 Edit source

RRDtool はネットワークトラフィックを測定し、可視化するためによく使用されます。このような場合、 Simple Network Management Protocol (SNMP) を使用して行います。このプロトコルはネットワークデバイスに対して、内部カウンタの情報からさまざまな値を生成させて取得することができます。 SNMP に関する詳細は、 http://www.net-snmp.org/ をお読みください。

今回の例は上記と少し異なります。データを手作業で取得する必要があります。下記のようなヘルパースクリプト free_mem.sh を使用して、現在の空きメモリ量を調べて、標準出力に書き込むことを行います。

> 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 日深夜からの経過秒数で日時を表すもので、たとえば 1272907114 は 2010 年 5 月 3 日 17:18:34 を意味することになります。

  • 空きメモリの情報は free -b コマンドで取得します。つまり、 キロ などの接頭辞のない純粋なバイト単位の値を取得しています。

  • echo で始まる行には、次の手順で使用するデータベースのファイル名 ( free_mem.rrd ) と、 RRDtool で値を更新する際のコマンドラインが書かれています。

free_mem.sh を実行して、下記のような結果が得られたものとします:

> 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

"\n \n"

2.11.2.2 データベースの作成 Edit source

まずは下記のようにコマンドを入力して実行し、ラウンドロビン型のデータベースを作成します:

> 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 の出力に現れた Unix 時間 (1272974835) よりも前の日時を指定しています。

  • --step オプションは測定したデータの時間間隔を指定するためのものです。

  • DS:memory:GAUGE:600:U:U の部分は、データベースに対して新しいデータソース (DS) を設定している箇所です。 memory という名称で gauge という種類を設定し、データとデータの間の間隔は最大で 600 秒、値の 最小値最大値 は未知 (U; Unknown) としています。

  • RRA:AVERAGE:0.5:1:24 はラウンドロビンアーカイブ (RRA) と呼ばれるもので、データ点の 平均値 を計算する 統合関数 を利用して処理を行い、データを格納することを表しています。このとき、行末には 3 種類の統合関数向けのパラメータが指定されています。

何もエラーが発生することなく終了すれば、 free_mem.rrd がカレント (現在居る) ディレクトリ内に作成されているはずです:

> ls -l free_mem.rrd
-rw-r--r-- 1 tux users 776 May  5 12:50 free_mem.rrd

2.11.2.3 データベースの値の更新 Edit source

データベースを作成したら、あとは測定したデータをデータベースに投入していきます。 2.11.2.1項 「データの収集」 で行ったとおり、既に free_mem_updates.log というファイルを作成してあり、この中には rrdtool update で始まる更新コマンドの羅列が記載されていますので、あとはそのままそれらを実行するだけです。

> 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 記録された値の表示 Edit source

データを測定し、データベースを作成し、測定されたデータをデータベースに投入したら、あとはデータベースを利用するだけです。ここでは値を読んでみることにします。

データベース内に保存された全てのデータを取得するには、下記のように入力して実行します:

> 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 はデータベース内のデータ点の平均値を算出するためのもので、データソースを指定する際に設定したものです ( 2.11.2.2項 「データベースの作成」 を参照) 。それ以外の関数は指定していません。

  • 出力の最初の行には、 2.11.2.2項 「データベースの作成」 で行ったデータソースの設定時に指定した名前が現れています。

  • 左側の列は時刻を、右側の列には指数表記での測定値の平均が示されています。

  • nannot a number (数値ではない) の意味で、 最初と最後では平均値を算出できないため、このような表示になっています。

あとはデータベース内に保存されたデータをグラフ化するだけです:

> 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-labely 軸に表示するラベルを、 --title にはグラフ全体のタイトルをそれぞれ指定しています。

  • --zoom ではグラフの拡大率を指定しています。この値は 0 より大きい値でなければなりません。

  • --x-grid では、グラフ内のグリッド線の描画方法とラベルを指定しています。この例では 1 秒間隔でグリッド線を描画し、 4 秒間隔で赤点線を、 10 秒間隔でラベルをそれぞれ描画しています。

RRDtool で作成したグラフの例
図 2.1: RRDtool で作成したグラフの例

2.11.3 さらなる情報 Edit source

RRDtool は複雑なツールであり、多数のサブコマンドやコマンドラインオプションが用意されています。それらの中には分かりやすいものもある一方、期待するような出力を行おうとすると、いろいろ試行錯誤を行って調整する必要に迫られることもあります。

基本的な情報のみを提供している RRDtool のマニュアルページ ( man 1 rrdtool ) とは別に、 RRDtool home page (英語のみ) をご覧になることをお勧めします。ここには rrdtool コマンドやそのサブコマンドに対する詳細な ドキュメンテーション (日本語訳が RRDtool マニュアル訳 などにあります) が用意されています。また チュートリアル (英語) には、一般的な RRDtool の作業手順が示されています。

ネットワークトラフィックの監視を行いたい場合は、 MRTG (Multi Router Traffic Grapher) (英語) プロジェクトをご覧になるとよいでしょう。 MRTG は、様々なネットワークデバイスから収集した情報をグラフ化することができます。この中でも RRDtool を使用しています。

このページを印刷