システム ファイル キャッシュが物理 RAM の大部分を消費すると、アプリケーションとサービスでパフォーマンスの問題が発生します

適用先
Microsoft Windows XP Professional x64 Edition Windows Vista Home Basic Windows Vista Home Premium Windows Vista Business Windows Vista Enterprise Windows Vista Ultimate Windows Vista Home Basic 64-bit Edition Windows Vista Home Premium 64-bit Edition Windows Vista Enterprise 64-bit Edition Windows Vista Ultimate 64-bit Edition Windows Server 2008 Datacenter without Hyper-V Windows Server 2008 Enterprise without Hyper-V Windows Server 2008 Standard without Hyper-V Windows Server 2008 Datacenter Windows Server 2008 Enterprise Windows Server 2008 Standard Windows Server 2008 for Itanium-Based Systems Windows Server 2008 R2 Datacenter Windows Server 2008 R2 Enterprise Windows Server 2008 R2 Service Pack 1 Windows Server 2008 R2 Standard

現象

さまざまなバージョンの 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 出力の例。

メタファイル メモリ使用率が高いことを示す RAMMap 使用回数の出力

図 2. コンピューターで問題が発生していない RamMap 出力の例。

RAMMap 使用回数メタファイルを過度に使用せずにメモリ使用量を示す出力

パフォーマンス モニターの Memory\System Cache Resident Bytes カウンターが時間の経過と共に増加傾向を示している場合、図 3 に示すように、コンピューターに問題が発生しています。

図 3. 時間の経過と共にコンピューターに問題が発生するパフォーマンス モニター出力の例。

時間の経過と共に増加するシステム キャッシュ常駐バイトを示すパフォーマンス モニター グラフ

再起動の必要性

このサービスをインストール、アンインストール、または使用する際、コンピューターを再起動する必要はありません。

この問題の影響を受けると思われるお客様とやり取りしているためにこの記事を読んでいる場合は、次の手順に従って問題を解決してください。

  1. 前述のように、システムの RamMap 出力、パフォーマンス データ、または poolmon データによって、システム ファイル キャッシュが物理 RAM の大部分を消費していることが確認されていることを確認します。

  2. Windows ダイナミック キャッシュ サービスを入手するには、 ここからダウンロードします。

  3. ダイナミック キャッシュ レジストリの設定は次のとおりです。

    ファイル サーバーについては、1 GB を試してみることをお勧めします。
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DynCache\Parameters]
    "MaxSystemCacheMBytes"=dword:00000400
    "MinSystemCacheMBytes"=dword:00000064
    "SampleIntervalSecs"=dword:0000003c
    "CacheUpdateThresholdMBytes"=dword:00000064

    Exchange 2007 では、500 MB を試してみてください。
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DynCache\Parameters]
    "MaxSystemCacheMBytes"=dword:000001F4
    "MinSystemCacheMBytes"=dword:00000064
    "SampleIntervalSecs"=dword:0000003c
    "CacheUpdateThresholdMBytes"=dword:00000064

    SQL 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 サイトから入手できます。

http://www.microsoft.com/download/details.aspx?FamilyID=e24ade0a-5efe-43c8-b9c3-5d0ecb2f39af&displaylang=en

その他のリソース

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

LargeSystemCache TechNet トピック

RamMap のブログ記事

状態

Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。