ページ要求された仮想メモリオペレーティングシステムとしての固有の複雑性により、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 (si と so それぞれのフィールド)がありますが、全体的には正常に稼働しています。ただし、現在のメモリ使用量ではどれだけの追加負荷を処理できるか確かではありません。
メモリ関連の問題を調べる時、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 |
kbmemfree と kbmemused それぞれのフィールドでは空きメモリと使用メモリの値が示され、%memused フィールドには使用メモリの割合が示されています。kbbuffers と kbcached それぞれのフィールドではバッファとシステム全体のデータキャッシュに割り当てられているメモリがキロバイトで示されています。
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 の使用状況については、kbswpfree と kbswpused それぞれのフィールドで空き 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 バイトです。他のアーキテクチャをベースとしたシステムによってはページサイズが異なることがあります。 |