必要メモリ・サイズを見極めるTech TIPS

アプリケーションのパフォーマンスを最大限に引き出すには、アプリケーションやシステム全体がすべて物理メモリに入るように、十分な量のメモリを用意するのが望ましい。タスク・マネージャを使ってシステムに必要なメモリの量を正確に見積もることができる。

» 2001年12月18日 00時00分 公開
[打越浩幸デジタルアドバンテージ]
「Windows TIPS」のインデックス

連載目次

対象OS:Windows 2000 Professional/Windows XP Professional/Windows XP Home Edition/Windows 2000 Server/Windows Server 2003


解説

本TIPSではWindows 2000/Windows XP/Windows Server 2003におけるタスク・マネージャの見方について解説しています。Windows 7など、ほかのWindows OSについては、次のTIPSをそれぞれ参照してください。


 Windows 2000やWindows XPなどの仮想記憶システムを採用したOSでは、システムに物理的に装着されているメモリ量を超えるような、大きなプログラムや多数のプログラムを同時に実行することができる。物理メモリが足りない場合は、メモリに入りきらない部分をディスクへ書き出しておき、必要に応じてメモリ上へ読み出してきて(と同時に、他の必要性の少ない部分をディスク上へ書き出して)、実行を続ける。これを繰り返すことにより、少ないメモリでも大容量のメモリがある場合と同じようにプログラムの実行を続けることができる。

 だがこの方法では、メモリの内容をディスクへ書き出したり(スワップ・アウト)、あとでそれを読み込んだり(スワップ・イン)するために、実行に非常に時間がかかるというデメリットがある。ディスクのアクセス速度は、メモリよりはるかに遅いからだ。どの程度実行時間が余計にかかるかは、使用するプログラムの特性やメモリ・サイズ、システム環境などに大きく依存するが、例えば「特集:Windows XP性能評価(1)――2.Windows XP搭載メモリ・サイズ別性能テスト」中のベンチマーク・テストの結果などが参考になるだろう。このテストでは、メモリが64Mbytesしかない場合は、128Mbytes以上の場合に比べて、3割(Wordベンチマーク)から5割(Excelベンチマーク)も遅くなっていた。

 このようなパフォーマンスの低下を避けるには、十分な量のメモリをシステムに装着すればよい。だが実際にはどのぐらいの量のメモリがあればよいのだろうか? これを知るには、各プログラムやOSカーネル自体で使用されるメモリの量を調べる必要がある。そして、仮想記憶に伴うページのスワップが発生しない程度にメモリを十分搭載すれば、プログラムの性能を最大限に引き出すことができる。

 なおメモリを増設すれば、スワップの発生を抑えることで、システムの性能低下を回避することはできるが、それ自体はシステムを高速化する効果はない。さらに速度を上げるには、CPUの高速化など別の手段が必要である。このように必要以上のメモリを用意してもあまりメリットはないのだが、Windows NTやWindows 2000、Windows XPでは、プログラムやカーネル自身で使用されない、余った部分の物理メモリは「システム・キャッシュ」として利用されることになっている。これは、OSが行うファイルの読み書きなどをキャッシュしておいて、低速なディスクへのアクセスをなるべく減らすというメカニズムである。プログラムやカーネルで必要な量のメモリのほかに、100M〜200Mbytes程度(この程度で十分だろう)余分にメモリを用意すると、ファイル入出力などのシステムのパフォーマンスを向上させることができる。

確認方法

●メモリの使用状況は[タスク・マネージャ]−[パフォーマンス]タブで確認

 Windows 2000/Windows XPでシステムが必要としているメモリ・サイズを確認するには、「タスク・マネージャ」を利用する。[Ctrl]+[Shift]+[ESC]キーを押すか、タスク・バー上でマウスを右クリックし、[タスク・マネージャ]を選択する。すると次の画面のようなタスク・マネージャが起動される。メモリの全般的な使用量を把握するには、[パフォーマンス]タブの内容に注目する。([ネットワーク]タブや[ユーザー]タブはWindows XPでのみ表示される)。

タスク・マネージャの[パフォーマンス]タブ タスク・マネージャの[パフォーマンス]タブ
これはWindows XPのタスク・マネージャの例。Windows 2000では[ネットワーク]タブや[ユーザー]タブはない(ドメインに所属しているWindows XPでは、この例と同じように[ユーザー]タブは表示されない)。ここでメモリの全般的な利用状況を確認することができる。
  (1)メモリの利用状況を表示させるにはここをクリックする。
  (2)PF(ページ・ファイル)の使用量(以下の(3)の数値をグラフにしたもの)。Windows 2000では[メモリ使用量]と表示されているが意味は同じである。なおグラフの最大値(一番上までバーが伸びたときの値)は、コミット・チャージの最大値((4):コミット・チャージの制限値)になる。物理メモリのサイズ((6):物理メモリの合計サイズ)ではない。
※Windows Vista/Windows Server 2008以降のOSのタスク・マネージャでは、このグラフ部分には、「物理メモリの使用量」が表示されている。コミット・チャージの値は表示されている場所が異なるので注意のこと。詳細は本記事冒頭で紹介しているTIPSを参照していただきたい。
  (3)使用中のメモリ空間。アプリケーションやカーネルなどで使用している(必要としている)メモリ空間の総サイズ。この値が物理メモリのサイズを超えていると、入りきらない部分がディスクへスワップ・アウトされていることになる。ページ・ファイルのサイズについては「Windows TIPS:最適なページ・ファイル・サイズを知るには」も参照のこと。
  (4)利用可能なメモリ空間サイズの最大制限値。物理メモリ・サイズ+ページ・ファイル・サイズになっている。ページ・ファイル・サイズのデフォルト値は物理メモリ・サイズの1.5倍なので、合計で物理メモリ・サイズの2.5倍まで増やすことができる。ページ・ファイル・サイズをより大きなサイズにすることもできるが、スワップ・イン、スワップ・アウトによるパフォーマンス低下が大きくなるので、メモリを増設する方が望ましい。
  (5)(3)の使用中のサイズのピーク値。この値は物理メモリのサイズを大きく超えていると、スワップが多発していることを示す。せいぜい物理メモリ・サイズの2倍以内になるように、メモリを増設した方がよいだろう。
  (6)物理メモリのサイズ。
  (7)プログラムやOSカーネル、システム・キャッシュなどに利用されていない、空き物理メモリのサイズ。必要に応じてプログラムやシステム・キャッシュなどのために利用される。
  (8)システム・キャッシュに利用されている物理メモリのサイズ。このサイズは空きメモリ・サイズに応じて動的に変化する。空きメモリが多ければキャッシュ・サイズも大きくなるが、空きメモリ領域が少なくなってくるとキャッシュのサイズも縮小する。(7)(8)では一部重複している部分があるので、その合計は物理メモリ・サイズを上回ることがある。
  (9)OSカーネルで使用されているメモリ・サイズ。以下の(10)の合計。
  (10)ページ・プールと非ページ・プールのサイズ。ページ・プールとは、カーネル・コードのうち、スワップ・アウトの対象となる部分のこと。空きメモリ領域が少なくなるとカーネルの一部であってもディスクへスワップアウトされる。非ページ・プールとは、カーネル・コードのうち、常に物理的なメモリ上に存在していて、スワップ・アウトの対象とならない部分のこと。割り込み処理ルーチンなどのように、スワップ・アウトされては困るようなコードが含まれている。

●「PF使用量」(もしくは「メモリ使用量」)に注目する

 メモリの全般的な使用量を把握するには、(Windows XPでは)[PF使用量]というグラフの値を調べる(Windows 2000では[メモリ使用量]となっている)。この値は、システム内で稼働しているOS自身やアプリケーションが必要としているメモリの総量を表している(この値は、下の方にある[コミット チャージ]の「合計」の値を分かりやすくグラフにしたもの)。当然ながら、同時に使用するアプリケーションの数が多ければ多いほど、そして各アプリケーションで使用するメモリのサイズが増えれば増えるほど、この使用量の値も大きくなる。

 そして、この値と実際の物理メモリ・サイズを比べてみる。システムに装着されている実際のメモリ・サイズは、上のダイアログ中の(6)の位置に表示されている(いずれもKbytes単位)。この例では、使用中のサイズが287Mbytesなのに対し、物理メモリ・サイズは256Mbytesなので、30Mbytes程度メモリが不足していることが分かる。足りない部分は実際にはページ・ファイルにスワップ・アウトされているので、(スワップ・インやスワップ・アウトのために)プログラムの実行速度が低下することになる。この速度低下を避けるためには、十分な量の物理メモリを装着すればよい。この場合は30Mbytes以上増設すればよいが、現実的なメモリ・モジュールの構成を考えると、64Mbytesか128Mbytesを増設すればよいだろう。

 ちなみに、このメモリ使用量の初期値(システムに1ユーザーがログオンした直後で、ほかに何もアプリケーションが動作していない状態)は、Windows 2000 Professionalでは大体60〜70Mbytes程度なのに対し、Windows XP ProfessionalやHome Editionでは90Mbytes程度であった(手元のマシンでの実測値。この値は、利用するハードウェア環境や、あらかじめインストールされているサービスなどによっても異なる)。つまりWindows XPでは、デフォルトで20〜30Mbytes程度余分にメモリを必要としており、その分アプリケーションのために利用できるメモリが少なくなっている。128Mbytesしか実メモリがないマシンでWindows XPを使用すると、空きメモリ・サイズは30Mbytes程度しかないことになる。これでは、2つか3つ程度のアプリケーションを実行すると、メモリはすべて消費されてしまうだろう。もちろん実際には、仮想記憶の仕組みによって、より大きなプログラムも実行させることができるが、スワップ・インやスワップ・アウトによるパフォーマンスの低下は避けられない。Windows XPを利用するならば、192Mbytes(128Mbytes+64Mbytes)か256Mbytes(128Mbytes+128Mbytes)程度のメモリが必要といわれるのはこのような理由による。特にWindows XPではマルチ・ユーザー機能(ユーザーの簡易切り替え機能)がサポートされているので、同時に稼働するプロセスの数も多く、より多くのメモリを必要とする傾向がある。

●より詳細なメモリ・サイズの見積もり方法

 各プログラムごとに正確にどの程度のメモリを必要としているかを知るには、タスク・マネージャの[プロセス]タブを使用する。ここには、システム内で動作しているすべてのプロセスの名称と、そのメモリ使用量などが表示されているので、各アプリケーションで実際にどの程度のメモリが必要なのかを簡単に知ることができる。

タスク・マネージャの[プロセス]タブ タスク・マネージャの[プロセス]タブ
これを使えば、各プロセスごとのメモリ使用量を正確に求めることができる。ただしシステム・キャッシュ領域などは含まれないので、これらの値をすべて加算しても、先の「メモリ使用量」の値にはならない。
  (1)プロセスごとの値を表示させるにはこの[プロセス]タブを利用する。
  (2)実行中のプロセスの名前。IEXPLORE.EXEはInternet Explorer。
  (3)これがIEが使用しているメモリ・サイズ。ただしプログラムを最小化していると、使わない部分のメモリを解放してしまうので非常に小さな値になる。サイズを調べるときは、最小化せずにウィンドウを開いたままの状態にして測定すること。
  (4)Windows XPでは複数のユーザーが同時にシステムを利用することができる。全ユーザーのプロセスのサイズを調べるには、このチェック・ボックスをオンにする。

 アプリケーションにもよるが、現在一般的なWindowsアプリケーションのプロセス・サイズは、1つあたり10M〜20Mbytes程度だろう。例えばInternet Explorerでは、起動するだけで15Mbytes程度のメモリを使用する。そして、ウィンドウを1つ開くたびに([ファイル]−[新規作成]−[ウィンドウ]もしくは[Ctrl]-[N]を実行する)、1Mbytes程度のメモリが必要となる。ただしこれはIE固有のケースだが、いま述べた新規ウィンドウではなく、[スタート]メニューやクイック起動バー上のIEアイコンを使って、新規にIEを起動した場合には、そのたびに別プロセスが起動され、新たに15Mbytes程度のメモリが必要になる。したがって多数のWebページを表示する際にメモリを節約したければ、新規にIEを起動するのではなく、1つのIEから次々と新規ウィンドウを開いてページを表示するのがよい。このような値をすべてのアプリケーションで調べれば、必要なメモリのサイズを正確に見積もることができる。

「Windows TIPS」のインデックス

Windows TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。