4.6. Red Hat Enterprise Linux 固有の情報

ページ要求された仮想メモリオペレーティングシステムとしての固有の複雑性により、Red Hat Enterprise Linux 環境下においてメモリ関連のリソースを監視を行なう場合には当惑することがあります。したがって、もう少し簡単なツールから始めるのが最適です。

free を使うとメモリとスワップの簡潔な使用概要を取得することができます。次に例をあげます。

             total       used       free     shared    buffers     cached
Mem:       1288720     361448     927272          0      27844     187632
-/+ buffers/cache:     145972    1142748
Swap:       522104          0     522104
      

このシステムには 1.2GB の RAM があり、実際に使用されているのは約 350MB だけであることがわかります。これだけ RAM に空きがあるシステムのため、500MB の swap パーティションは使用されていません。

上記とは対象的な例をあげます。

             total       used       free     shared    buffers     cached
Mem:        255088     246604       8484          0       6492     111320
-/+ buffers/cache:     128792     126296
Swap:       530136     111308     418828
      

このシステムには約 256MB の RAM がありますが、その大半が使用されているため空き領域は 8MB だけです。512MB の swap パーティションのうち 100MB 以上が使用されています。最初の例のシステムに比べメモリの観点でこのシステムは制限されていますが、このメモリの制限がパフォーマンスの問題の要因となっているのかを判断するにはもう少し詳しく調べてみる必要があります。

free よりわかりづらいですが、vmstat にはメモリ使用量の統計値以外のことも表示する利点があります。vmstat 1 10 の出力例です。

   procs                      memory    swap          io     system         cpu
 r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    cs  us  sy  id
 2  0  0 111304   9728   7036 107204   0   0     6    10  120    24  10   2  89
 2  0  0 111304   9728   7036 107204   0   0     0     0  526  1653  96   4   0
 1  0  0 111304   9616   7036 107204   0   0     0     0  552  2219  94   5   1
 1  0  0 111304   9616   7036 107204   0   0     0     0  624   699  98   2   0
 2  0  0 111304   9616   7052 107204   0   0     0    48  603  1466  95   5   0
 3  0  0 111304   9620   7052 107204   0   0     0     0  768   932  90   4   6
 3  0  0 111304   9440   7076 107360  92   0   244     0  820  1230  85   9   6
 2  0  0 111304   9276   7076 107368   0   0     0     0  832  1060  87   6   7
 3  0  0 111304   9624   7092 107372   0   0    16     0  813  1655  93   5   2
 2  0  2 111304   9624   7108 107372   0   0     0   972 1189  1165  68   9  23
      

この 10 秒間の例では、空きメモリ量 (free フィールド)が多少異なり、スワップ関連の I/O (siso それぞれのフィールド)がありますが、全体的には正常に稼働しています。ただし、現在のメモリ使用量ではどれだけの追加負荷を処理できるか確かではありません。

メモリ関連の問題を調べる時、Red Hat Enterprise Linux 仮想メモリサブシステムがシステムメモリをどのように使用しているかを判別する必要がある場合がよくあります。sar を使うとこの点についてシステムパフォーマンスを詳しく調べることができます。

sar -r のレポートを見ると、メモリとスワップの使用状況の詳細を調べることができます。

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

12:00:01 AM kbmemfree kbmemused  %memused kbmemshrd kbbuffers  kbcached
12:10:00 AM    240468   1048252     81.34         0    133724    485772
12:20:00 AM    240508   1048212     81.34         0    134172    485600
…
08:40:00 PM    934132    354588     27.51         0     26080    185364
Average:       324346    964374     74.83         0     96072    467559
      

kbmemfreekbmemused それぞれのフィールドでは空きメモリと使用メモリの値が示され、%memused フィールドには使用メモリの割合が示されています。kbbufferskbcached それぞれのフィールドではバッファとシステム全体のデータキャッシュに割り当てられているメモリがキロバイトで示されています。

kbmemshrd フィールドは 2.4 Linux カーネルを使用しているシステム( Red Hat Enterprise Linux など)に対しては常にゼロです。

このレポートの行はページに収まるよう切り詰めています。次に各行の残りを示します。読みやすいよう左側にタイムスタンプを付けています。

12:00:01 AM   kbswpfree kbswpused  %swpused
12:10:00 AM      522104         0      0.00
12:20:00 AM      522104         0      0.00
…
08:40:00 PM      522104         0      0.00
Average:         522104         0      0.00
      

swap の使用状況については、kbswpfreekbswpused それぞれのフィールドで空き swap 領域と使用 swap 領域をキロバイト単位で示し、%swpused フィールドで使用 swap 領域の割合を示しています。

行なわれているスワッピング動作を更に詳しく調べるには、sar -W レポートを使います。次に例をあげます。

Linux 2.4.20-1.1931.2.231.2.10.entsmp (raptor.example.com)      07/22/2003

12:00:01 AM  pswpin/s pswpout/s
12:10:01 AM      0.15      2.56
12:20:00 AM      0.00      0.00
…
03:30:01 PM      0.42      2.56
Average:         0.11      0.37
      

ここでわかるように、平均では swap に送られたページ (pswpout/s) に比べて swap から送られたページ (pswpin/s) は 3 分の 1 でした。

どのようにページが使用されているかさらに調べるには、sar -B レポートを参照します。

Linux 2.4.20-1.1931.2.231.2.10.entsmp (raptor.example.com)      07/22/2003

12:00:01 AM  pgpgin/s pgpgout/s  activepg  inadtypg  inaclnpg  inatarpg
12:10:00 AM      0.03      8.61    195393     20654     30352     49279
12:20:00 AM      0.01      7.51    195385     20655     30336     49275
…
08:40:00 PM      0.00      7.79     71236      1371      6760     15873
Average:       201.54    201.54    169367     18999     35146     44702
      

ここでは、1 秒間にディスクからページインされているブロック数 (pgpgin/s) とディスクからページアウト (pgpgout/s) されているブロック数がわかります。これらの値は仮想メモリの全体的な動作の指標となります。

これだけはなく、このレポートにある他のフィールドを調べるとさらに詳細な情報がわかります。Red Hat Enterprise Linux カーネルはすべてのページをアクティブまたは非アクティブとしてマークします。名前の通り、アクティブなページは現在、何らかで使用中であり(例、プロセスまたはバッファのページ)、非アクティブなページは使用されていません。このレポート例ではアクティブなページリスト (activepg field) は約 660MB の平均値になっています [1]

レポート内の残りのフィールドは非アクティブリストについてです — 何らかの理由で最近使用されていないページ。inadtypg フィールドではダーティな(変更された)ためディスクへ書き込みが必要とされる可能性がある非アクティブのページ数を示しています。一方、inaclnpg フィールドではクリーンな(変更されていない)ためディスクへの書き込みが不要な非アクティブのページ数を示しています。

inatarpg フィールドは非アクティブリストの望ましいサイズを表しています。この値は Linux カーネルによって算出され、非アクティブリストがページ置換の目的でプールとして動作するのに十分残っているなどでサイズ設定されます。

ページ状態についての補足的な詳細を見るには(特に、どのくらい頻繁にページが状態を変更するか)、sar -R レポートを利用します。ここに例をあげます。

Linux 2.4.20-1.1931.2.231.2.10.entsmp (raptor.example.com)      07/22/2003

12:00:01 AM   frmpg/s   shmpg/s   bufpg/s   campg/s
12:10:00 AM     -0.10      0.00      0.12     -0.07
12:20:00 AM      0.02      0.00      0.19     -0.07
…
08:50:01 PM     -3.19      0.00      0.46      0.81
Average:         0.01      0.00     -0.00     -0.00
      

特にこの sar レポートの値は、プラス、マイナスまたはゼロで表示されるところが特有です。値がプラスであれば、このタイプのページが増加している割合を示しています。マイナスであれば、このタイプのページが減少している割合を示します。 値がゼロであるとこのタイプのページは増減がないということになります。

この例では、最後のサンプル行で毎秒 3 ページ以上が空きページのリストから割り当てられていて (frmpg/s フィールド)、毎秒 1 ページ近くがページキャッシュに加えられた (campg/s フィールド)ことを示しています。バッファとして使用されたページのリスト (bufpg/s フィールド)は 2 秒毎に約 1 ページ増えたのに対し、共有メモリページリスト (shmpg/s フィールド)はページの増減がありませんでした。

注記

[1]

この例で使用している x86 システムの Red Hat Enterprise Linux 環境下でのページサイズは 4096 バイトです。他のアーキテクチャをベースとしたシステムによってはページサイズが異なることがあります。