システム ファイル キャッシュが物理 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 より前の Microsoft Windows オペレーティング システムの 32 ビット バージョンでは、システム ファイル キャッシュのワーキング セットの理論上のメモリ制限は 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 の常駐バイト カウンターを監視し、時間の経過に伴ってキャッシュが継続的に増加することを確認します。

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

10214de2-59a3-f4c0-07fb-5f75a3cbcd47

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

26eb9766-30fb-0aba-069b-b9f6b636a812

パフォーマンス モニターの Memory\System Cache 常駐バイトカウンターが時間の経過と同時に上昇傾向を示している場合、図 3 に示すように、コンピューターで問題が発生しています。

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

5a390908-db40-e825-d4fd-348cd86d33eb

再起動の必要性

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

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

  1. 前に説明したように、お客様の RamMap 出力、perfmon、または 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 の操作時に 2 GB を使用してきました。
    [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 動的キャッシュ サービスは、これらの API を使用してこの問題の影響を最小限に抑えるための 1 つの戦略を示すサンプル サービスです。

Microsoft 動的キャッシュ サービスをインストールして使用しても、Microsoft Windows のサポートが除外されることはありません。 このサービスとそのソース コードは、Microsoft でサポートされている API を使用してファイル システム キャッシュの拡張を減らす方法の例として提供されます。

サービスとソース コードは、次の Microsoft Web サイトから取得できます。

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

その他のリソース

5 番目のエディションである Windows Internals の第 9 章 (メモリ管理) と 10 章 (キャッシュ マネージャー) を参照してください。

メモリ管理 (大規模なシステム キャッシュの問題) ブログ投稿

低速な大きなファイルコピーの問題に関するブログ投稿

Memory Limits for Windows Releases (英語情報)

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

918483 64 ビット バージョンのバッファー プール メモリのページングを減らす方法SQL Server

895932 Windows XP でシステム キャッシュ モードを有効にする前に考慮すべきこと

レジストリを使用してWindows NT サーバーを最適化する方法を232271する

837331 Windows Server 2003 のキャッシュ マネージャーについて

http://technet2.microsoft.com/windowsserver/en/library/EFA621BD-A031-4461-9E72-59197A7507B61033.mspx

LargeSystemCache TechNet トピック

RamMap ブログ投稿

状態

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