DynCache(Microsoft Dynamic Cache Service) が動作しない

ある Windows 2008R2 サーバーが極端なメモリ不足(利用可能メモリはほぼ0)を起こしたため調査したところ、プログラムのメモリではなくOSのメモリが肥大化していることが原因と分かった。

この調査の過程で分かった知見を記載することにより、後進の方々のお役に立ちたい。

【調査方法】
パフォーマンスメータのデータコレクタセットもしくは通常のグラフを用いて次のカウンタを計測する。
Memory - Available Bytes
Memory - System Cache Resident Bytes
Process - Page Fults/Sec
Process - Working Set - _Total

データコレクタセットを用いればバイナリログに保存でき、relog コマンドでCSVに変換できる。
ログを調べて、Working Set は肥大化していないのに時間とともにSystem Cache Resident Bytes が肥大化してAvailable Bytes が減少(その結果、Page Faults/Sec が多発する)していれば、システムファイルキャッシュメモリの肥大化がメモリ不足の原因であると判断できる。
そしてこのシステムファイルキャッシュの肥大化はOSの次の問題によって発生すると考えられる。

http://support.microsoft.com/kb/976618/ja
システム ファイルのキャッシュが物理メモリの大部分を使用するとアプリケーションおよびサービスのパフォーマンスの問題が発生します。

(以下、関連知識)
利用可能メモリはパフォーマンスメータの Memory - Available Bytes の値である。メモリ使用率を計算するときの分母には、BIOSやビデオメモリが使用する領域があるので、実装メモリのサイズではなく、OSが認識している物理メモリのサイズを使う必要がある。

【対策】
マイクロソフトのナレッジベースに対策として紹介されている、Microsoft Dynamic Cache Service(DynCache)には大きな罠があり、数日ハマってしまったので注意を喚起したい。
※DynCacheサービスのドキュメントは説明が不足しているため、非常にわかりにくい。ソースコードを見たほうが早いかもしれない。

Dyncacheには動的管理と静的管理の2つの方法があり、MaxSystemCacheMBytesの値が1-99のときは動的管理になり、キャッシュの最大制限値を利用可能メモリの何%に、201以上の場合は静的管理になり、キャッシュの最大制限値は指定した値(MB)になる。

動的管理は指定したプロセスが動作したときだけ、各プロセスごとに指定したメモリのサイズだけOSが利用できるメモリから減算する(指定したプロセスのメモリのために余裕を持たせる)ことによって実現する。そして減算済みのメモリサイズの指定した%分をファイルシステムキャッシュの上限に設定する。つまり指定したプロセスが動作していなければ、その分のメモリをキャッシュに割り当てることになる。というのはなるべくメモリをシステムファイルキャッシュに割り当てたほうがよいという考えに基づいているのであろう。プロセスを何も指定しなければ単にOSが利用できるメモリの何%をファイルシステムキャッシュの上限に指定することになり、事実上、静的管理と同じになる

私が罠にハマったのは、使用したバイナリモジュールの問題であった。
DynCache.zip には Retail フォルダに
  AMD64
  I386
  IA64
フォルダがある。
問題が起きたサーバはAMDではなく、インテルの64itプロセッサを載せているので i386 を使用するのだろうと考えた。IA64 は遠い昔、HP とインテルが共同開発した、Itanium プロセッサのアーキテクチャであり、サービスとして登録しようとするとエラーが起きてしまう。ところが I386 のバイナリはインストールできるものの正しく動作しない。同じく Debug フォルダの I386 のバイナリも正しく動作しない。(Debug 版はDebug View を使うとデバッグメッセージを出力するはずが出力されない)。

手元の Windows 7マシンでは同じI386のバイナリが正しく動作するのでさらに混乱してしまった。

結論としては AMD64 フォルダのバイナリを使うのが正解であった。Intel のx86版の64bit命令アーキテクチャは AMD 仕様を採用した経緯があるので、インテルの x86 系の 64bit CPU を搭載している場合、AMD64 フォルダの exe を使う必要があった。私が使用した Windows 7 は 32bit 版だったので I386 フォルダのバイナリで正しく動作していたのであった。ドキュメントに一言あれば迷わずに済んだものをと嘆息せざるを得ない。私と同様に誤ったexeを使って問題が解決せず、苦しんでいる人もいるはずである。

Debug 版のメッセージを観測するときに使用できる Debug View はこちら。
https://technet.microsoft.com/ja-jp/sysinternals/bb896647.aspx

【検証方法その1・システムファイルキャッシュ肥大化の再現方法】
数GBのファイルを読み書きするとSystem Cache Resident Bytes が数GB程度まで急上昇する。1分ほどその状況が続き、また元の少ない状態に戻ってしまう。

DynCache サービスを静的管理の方法で設定した後、肥大化の操作を行うとSystem Cache Resident Bytesは設定した値を上限にピタリと止まる。これが肥大化を防止できた証である。

【検証方法その2・キャッシュ最大制限値の確認】
マイクロソフトのナレッジベースに記載されているとおり、DynCacheはGetSystemFileCacheSize API 関数とSetSystemFileCacheSize API 関数をコールするものである。
一度設定した最大制限値は次回リブートまで保持される(リブートで消えてしまうので自動起動のサービスで再度設定する必要がある)。
従ってOS起動後GetSystemFileCacheSize を実行すれば、DynCacheが正しく動作したかどうか確認できることになる。GetSystemFileCacheSize API をコールして結果を表示するPower Shell スクリプトが次の掲示板に掲載されている。

http://stackoverflow.com/questions/5898843/c-sharp-get-system-file-cache-size/17875550#17875550

上記のスクリプトを GetSystemFileCacheSize.ps1 に保存したら、
コマンドプロンプトでps1ファイルを保存したディレクトリに移動したのち、
PowerShell と入力、
Set-ExecutionPolicy RemoteSigned を入力(セキュリティポリシーを変更)、
.\GetSystemFileCacheSize.ps1 を入力して実行すればよい。

出力されるフラグの意味は次を参照のこと(ビットごとのOR演算になる)。
https://msdn.microsoft.com/en-us/library/windows/desktop/aa965224%28v=vs.85%29.aspx

以上、健闘を祈る。
[PR]
by reich | 2015-02-28 10:51 | IT


メモ


by reich

プロフィールを見る
画像一覧
更新通知を受け取る

カテゴリ

全体
身辺雑記
IT
SSD
ニュース
グルメ
Raspberry Pi
未分類

以前の記事

2017年 03月
2017年 02月
2016年 06月
2016年 04月
2016年 02月
2015年 11月
2015年 10月
2015年 07月
2015年 03月
2015年 02月
2015年 01月
2014年 11月
2014年 10月
2014年 09月
2014年 08月
2014年 06月
2014年 05月
2014年 04月
2014年 02月
2014年 01月
2013年 12月
2013年 06月
2013年 05月
2013年 02月
2012年 10月
2012年 08月
2012年 07月
2012年 05月
2012年 04月
2012年 03月
2012年 02月
2011年 12月
2011年 08月
2011年 06月
2011年 05月
2011年 03月
2010年 11月
2010年 10月
2010年 02月
2010年 01月
2009年 12月
2009年 08月
2009年 06月
2009年 04月
2009年 01月
2008年 12月
2008年 09月
2008年 08月
2008年 07月
2008年 06月
2008年 05月
2007年 06月
2007年 05月
2007年 04月
2006年 06月

フォロー中のブログ

メモ帳

最新のトラックバック

南朝鮮で「親日派」財産を..
from 漆黒ノ軍皇
ビーチバレーの妖精!浅尾..
from ビーチバレー浅尾美和のビキニ..

ライフログ

検索

その他のジャンル

ファン

記事ランキング

ブログジャンル

オヤジ
ネット・IT技術

画像一覧