現象
さまざまなバージョンの Windows XP、Windows Vista、Windows Server 2003、Windows Server 2008、および Windows Server 2008 R2 のアプリケーションとサービスでパフォーマンスの問題が発生する。 さらに、次の現象が発生します。
- 使用可能なメモリがほぼ使い果たされています。
- システム ファイル キャッシュは物理 RAM の大部分を消費します。
- ハード ディスクへの連続的かつ大量のキャッシュされた読み取り要求が存在する。
原因
Microsoft Windows オペレーティング システムのメモリ管理では、需要ベースのアルゴリズムが使用されます。 いずれかのプロセスが大量のメモリを要求して使用すると、そのプロセスのワーキング セットのサイズ (物理 RAM のメモリ ページの数) が大きくなります。 これらの要求が継続的でチェックされていない場合、プロセスのワーキング セットは拡張され、すべての物理 RAM を消費します。 この場合、他のすべてのプロセスのワーキング セットはハード ディスクにページ アウトされます。 メモリ ページが継続的にハード ディスクに書き込まれ、ハード ディスクから読み取られるため、この動作によりアプリケーションやサービスのパフォーマンスが低下します。
この動作は、システム ファイル キャッシュのワーキング セットにも適用されます。 いずれかのプロセスまたはドライバーからの大量のキャッシュされた読み取り要求が継続的かつ大量である場合、システム ファイル キャッシュのワーキング セット サイズは、この要求を満たすために増加します。 システム ファイル キャッシュは物理 RAM を消費します。 そのため、十分な量の物理 RAM を他のプロセスに使用できません。
Windows Vista より前の 32 ビット版の Microsoft Windows オペレーティング システムでは、システム ファイル キャッシュのワーキング セットの理論上のメモリ制限は 1 ギガバイト (GB) 未満です。 仮想アドレス範囲の制限により、システム ファイル キャッシュのワーキング セットが物理 RAM を使い果たすことはありません。
32 ビット版の Windows Vista オペレーティング システムでは、カーネル リソースは動的に割り当てられます。 システム ファイル キャッシュのワーキング セットは増加し、他のカーネル リソースを犠牲にしてカーネル モードの仮想アドレス範囲を消費します。 このメモリ範囲の制限は 2 GB 未満です。 コンピューターに 2 GB を超える物理 RAM がある場合、キャッシュがすべての物理 RAM を使い果たすことはできません。 ただし、キャッシュがカーネル内の仮想アドレス空間を使い果たす可能性があります。 これにより、他のカーネル コンポーネントでの割り当てエラーが発生する可能性があります。
64 ビット版の Windows オペレーティング システムでは、通常、仮想アドレス範囲のサイズは物理 RAM よりも大きくなります。 このような状況では、システム ファイル キャッシュのワーキング セットが増加して、物理 RAM の大部分を消費する可能性があります。
解決策
Windows 7 および Windows Server 2008 R2 オペレーティング システムのメモリ管理アルゴリズムは、以前のバージョンの Windows で見つかった多くのファイル キャッシュの問題に対処するために更新されました。 Windows 7またはWindows Server 2008 R2を実行しているコンピューターにこのサービスを実装する必要があるのは、特定の特殊な状況だけです。
システムが影響を受けるかどうかを確認する方法
システムがこの問題の影響を受けるかどうかを確認するには、SysInternals RamMap ツールをインストールします。 このツールは、次の Windows Sysinternals Web サイトから入手できます。
http://technet.microsoft.com/en-us/sysinternals/ff700229
ツールを実行するときに、[ カウントを使用 ] オプションを選択します。 これにより、現在のメモリ使用パターンを示す複数の列が表示されます。 [ アクティブ ] 列をクリックして、使用されているバイト数で並べ替え、合計のすぐ下で最も上位の使用量を確認します。
上位の使用回数が "メタファイル" であり、使用可能なメモリの大部分が使用されている場合は、「現象」セクションで説明されているシステム ファイル キャッシュの問題が発生しています。 これを確認するには、パフォーマンス モニターを使用して Memory\System Cache Resident Bytes カウンターを監視し、時間の経過と共にキャッシュが継続的に増加しているのを確認できます。
図 1. コンピューターで問題が発生している RamMap 出力の例。
図 2. コンピューターで問題が発生していない RamMap 出力の例。
パフォーマンス モニターの Memory\System Cache Resident Bytes カウンターが時間の経過と共に増加傾向を示している場合、図 3 に示すように、コンピューターに問題が発生しています。
図 3. 時間の経過と共にコンピューターに問題が発生するパフォーマンス モニター出力の例。
再起動の必要性
このサービスをインストール、アンインストール、または使用する際、コンピューターを再起動する必要はありません。
この問題の影響を受けると思われるお客様とやり取りしているためにこの記事を読んでいる場合は、次の手順に従って問題を解決してください。
前述のように、システムの RamMap 出力、パフォーマンス データ、または poolmon データによって、システム ファイル キャッシュが物理 RAM の大部分を消費していることが確認されていることを確認します。
Windows ダイナミック キャッシュ サービスを入手するには、 ここからダウンロードします。
ダイナミック キャッシュ レジストリの設定は次のとおりです。
ファイル サーバーについては、1 GB を試してみることをお勧めします。
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DynCache\Parameters]
"MaxSystemCacheMBytes"=dword:00000400
"MinSystemCacheMBytes"=dword:00000064
"SampleIntervalSecs"=dword:0000003c
"CacheUpdateThresholdMBytes"=dword:00000064Exchange 2007 では、500 MB を試してみてください。
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DynCache\Parameters]
"MaxSystemCacheMBytes"=dword:000001F4
"MinSystemCacheMBytes"=dword:00000064
"SampleIntervalSecs"=dword:0000003c
"CacheUpdateThresholdMBytes"=dword:00000064SQL 2005 以降では、過去に SQL EE で作業するときに 2GB を使用していました。
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DynCache\Parameters]
"MaxSystemCacheMBytes"=dword:000007D0
"MinSystemCacheMBytes"=dword:00000064
"SampleIntervalSecs"=dword:0000003c
"CacheUpdateThresholdMBytes"=dword:00000064
追加情報
この問題を回避するには、GetSystemFileCacheSize API 関数と SetSystemFileCacheSize API 関数を使用して、システム ファイル キャッシュのワーキング セットの最大または最小サイズ値を設定します。 これらの関数の使用は、システム ファイル キャッシュによる物理メモリの消費を制限するためにサポートされている唯一の方法です。
Microsoft Windows Dynamic Cache Service は、これらの API を使用してこの問題の影響を最小限に抑えるための 1 つの方法を示すサンプル サービスです。
Microsoft ダイナミック キャッシュ サービスをインストールして使用しても、Microsoft Windows のサポートが除外されることはありません。 このサービスとそのソース コードは、Microsoft がサポートする API を使用してファイル システム キャッシュの増加を抑える方法の例として提供されます。
本サービスおよびソース コードは、以下のマイクロソフト Web サイトから入手できます。
その他のリソース
Windows Internals, the 5th Edition の第 9 章 (メモリ管理) と 10 章 (キャッシュ マネージャー) をお読みください。
メモリ管理 (大規模システム キャッシュの問題) ブログ記事
Memory Limits for Windows Releases (英語情報)
976618 システム ファイル キャッシュが物理 RAM の大部分を消費すると、アプリケーションとサービスでパフォーマンスの問題が発生する
918483 64 ビット版の SQL Server でバッファ プール メモリのページングを減らす方法
895932 Windows XP でシステム キャッシュ モードを有効にする前に考慮すること
232271 レジストリを使用してサーバー Windows NT最適化する方法
837331 Windows Server 2003 のキャッシュ マネージャーについて
http://technet2.microsoft.com/windowsserver/en/library/EFA621BD-A031-4461-9E72-59197A7507B61033.mspx
状態
Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。