Windows Server 2008 R2 ファイルサーバーが重くのしかかり、RAM が限界に達し、サーバーだけでなくユーザーアプリケーションの速度低下も引き起こしているという問題が発生しました。奇妙なことに、タスクマネージャーでは実際にメモリを大量に消費しているプロセスは表示されていませんでしたが、システムメモリはほぼ満杯で、サーバーの動作も遅くなっていました。結局、問題はシステムファイルキャッシュ、特にNTFS によって保存されるメタデータが、通常よりもはるかに多くの RAM を消費していることでした。これは、数千ものファイルを持つサーバー、特に x64 Windows ではよくあることで、NTFS メタデータのサイズが RAM のサイズにほぼ匹敵するほど膨れ上がることがあります。Windows には、このキャッシュを管理または制限するための簡単なツールがないため、少しイライラします。幸いなことに、毎回再起動したり RAM を増設したりしなくても、この問題を軽減する方法があります。1つは RAMMap というツールを使用してキャッシュを手動でクリアする方法です。もう1つは、よりプロアクティブにキャッシュを管理できる Dynamic Cache というカスタムサービスをインストールする方法です。迅速な解決策が必要か長期的な解決策が必要かに応じて、どちらも試してみる価値があります。
NTFSメタデータによるメモリ使用量の増加を修正する方法
方法1: RAMMapを使用してファイルシステムキャッシュを手動でクリアする
この方法はちょっとした裏技ですが、すぐに効果が出たいときには有効です。RAMMapはMicrosoftのSysinternalsスイートの無料ユーティリティで、こちらからダウンロードできます。RAMMapを管理者として実行します。開いたら、使用カウントタブに移動してメタファイルのエントリを探します。メモリを大量に消費している場合(25GBのサーバーで10GB以上など)、メニューから空にする -> システムワーキングセットを空にするを選択して、手動で強制的にクリアできます。これは基本的に、再起動せずにキャッシュを解放するようにWindowsに指示します。この手順は、ある意味半永久的な修正です。RAMMapのクリアボタンはキャッシュが再構築されるまでしか機能しないためです。大規模なファイルサーバーではキャッシュの再構築がかなり速く行われることがあります。セットアップによっては、これを行うとRAM使用量が数十GB削減され、驚くべきことに、CPU使用率がほぼ最大値からはるかに管理しやすいレベルにまで下がることがあります。他のセットアップでは、しばらくするとキャッシュがすぐに元に戻る場合があるため、完璧ではありませんが、再起動に何時間も費やすよりはましです。
方法2: より適切な制御のためにダイナミックキャッシュサービスをインストールする
キャッシュがどんどん大きくなり、手動でクリアするのが面倒な場合は、Dynamic Cacheなどの特別なサービスをインストールするといいでしょう。このサービスを使用すると、MFT キャッシュを動的に管理して、使用できる RAM の量を効果的に制限できるため、すべてが消費されるのを防げます。プロセスは、まさにクリックアンドゴーではありません。まず、DynCache.exe を%SystemRoot%\System32にコピーします。次に、次のようなコマンドでサービスを作成します sc create DynCache binpath= %SystemRoot%\System32\DynCache.exe start= auto type= own DisplayName= "Dynamic Cache Service"。その後、レジストリ ファイルDynCache.reg (ダウンロードしたアーカイブ内にあります) をインポートして、既定のパラメーターを設定します。次に、レジストリHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DynCache\ParametersでMaxSystemCacheMBytesとMinSystemCacheMBytesを調整します。たとえば、MaxSystemCacheMBytes を4096 (4GB) に設定し、MinSystemCacheMBytesをより低い値に設定します。ただし、やりすぎには注意が必要です。キャッシュをRAM全体の半分以上に設定するのは、本当に理解している場合を除き、お勧めできません。最後に、サービスを起動します。 起動すると、NTFSメタデータに使用されるメモリが大幅に削減されるはずです。あるマシンでは、10GB以上からわずか4GBに削減され、パフォーマンスの問題も発生しませんでした。もちろん、最適なキャッシュサイズは設定によって異なるため、多少の調整が必要になる場合があります。sc start DynCache
そうですね、このアプローチは少し技術的ですが、一度設定してしまえばかなり効果的です。また、手動でのクリアリングとは異なり、定期的な介入は必要なく、長期的な解決策となります。
まとめ
- メタデータの蓄積により RAM 使用量が急増した場合は、RAMMap を使用してファイル キャッシュを手動でクリアします。
- 手動でのクリアでは不十分であったり面倒すぎる場合は、ダイナミック キャッシュ サービスのインストールを検討してください。
- キャッシュ制限は常に RAM の合計とワークロードに基づいて調整してください。多ければ多いほど良いというわけではありません。
まとめ
NTFSメタデータのせいで突然メモリ使用量が急増するのは少々面倒ですが、これらの方法を使えば、再起動やハードウェアのアップグレードといった極端な手段を講じることなく、メモリ使用量を管理できます。環境によっては、RAMMapフラッシュを短時間実行することでしばらくは安定した状態を保てますし、より厳しい環境では、ダイナミックキャッシュサービスを設定することで、よりクリーンで制御されたソリューションを実現できます。ただし、Windowsではこれが非常に簡単に実行できるわけではないので、試行錯誤が必要になる場合があることを覚えておいてください。忙しい日にサーバーがフリーズしたり、動作が重くなったりする事態を避けられるよう、この方法が少しでもお役に立てれば幸いです。