2006年11月05日 安直に「LargeSystemCacheを1に」と言う人が多すぎる
_ [PC][カスタマイズ]安直に「LargeSystemCacheを1に」と言う人が多すぎる
(!)追記 2009/03/15
- これは古い記事で,おもにWindows XPやWindows Server 2003を対象としたものです。
- Windows Vistaでは,そもそもLargeSystemCacheは使われていない可能性が高いです。
以下、初投稿(2006/11/05)時点の内容
サーバの様子がおかしい。おかしいのは、メモリの空き容量の変化である。
- 時間が経つにつれ、メモリが徐々に減っていく
- ファイルを転送すると、メモリが急激に消費される
- メモリが減るとOSがメモリを確保して、また繰り返し
これをグラフにすると、常にギザギザ。安定性が求められるサーバでは、いい感じがしない。
サーバのメモリを増やすべきかと思いつつ、「窓使いの友」を立ち上げて改善出来そうな設定項目を探していると、1つ気になる箇所が。そこを設定すると、現象がなくなったどころか、メモリに余裕が出来てしまった。その設定とは、「LargeSystemCache」。
LargeSystemCacheとは
- 「窓使いの友」では、「パフォーマンス 1」タブの「メモリ配分をキャッシュ優先にする」にチェック。
- (WinXP)コントロールパネル→システム→「詳細設定」タブ→パフォーマンスの「設定」ボタン→「詳細設定」タブ→メモリ使用量を「システム キャッシュ」に。
- レジストリキー HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management に DWORD値「LargeSystemCache」を1で作成。
上記の方法で設定可能な「LargeSystemCache」は、「アプリケーション起動用に確保されているメモリを開放する」と解説しているページが多い。しかし、この解説は間違っている。
本当のところ、LargeSystemCacheとは
Microsoft TechNetに「LargeSystemCache」の項があるので、一部を翻訳。
ファイルシステムキャッシュを増やすと、一般にサーバパフォーマンスを向上させます。しかし、アプリケーションやサービスに使用出来る物理メモリ領域が減ります。同様に、あまりシステムデータを書き込みしなければ、ディスクサブシステムの使用は最小限になります。しかし、そうでなければ、変更されたページはアプリケーションによって使われる可能性のあるメモリを占有します。
- LargeSystemCache 0の時:約8MBのファイルシステムキャッシュを確保します。システムは、利用可能なページが約1,000を下回るまで、変更されたページが物理メモリ上に残ることを許可します。この設定は、SQLサーバのように自らキャッシュしたり、IISのように程よい量のメモリでパフォーマンスを発揮したりするアプリケーションにおすすめです。
- LargeSystemCache 1の時:必要であれば、搭載物理メモリ量-4MBまで拡張することの出来る大きなシステムキャッシュワーキングセットを確保します。システムは、利用可能なページが約250を下回るまで、変更されたページが物理メモリ上に残ることを許可します。この設定は、大規模なネットワーク上で稼動するサーバにおすすめです。
「ページ」はメモリを管理する単位のこと(通常4KB/ページ)。「0」にした場合、ファイルシステムキャッシュが8MB確保され、空きメモリが少なくなると解放される。「1」にした場合、必要に応じて物理メモリのほとんどがシステムキャッシュとして確保され、空きメモリが極端に少なくなると解放される。Microsoftによれば、これがLargeSystemCacheの設定による正しい動作だ。
つまり、LargeSystemCacheを「1」にしておくと、メモリが開放されるどころか、物理メモリのほとんどがシステムキャッシュとして消費されてしまうわけだ。ファイルを転送するとメモリが急激に消費されたのも、この設定によってキャッシュされたためと思われる。それ相応のメモリを積むファイルサーバでもない限り、無意味にメモリを消費する上、メモリが必要な時に解放作業でパフォーマンスが低下してしまう。
効果や影響を正しく理解して使用しているならともかく、デタラメな解説を鵜呑みにしてとりあえず設定しているような環境(このサーバを含む)では、一度見直したほうがいいだろう。