2011-10-21 12 views
2

現在、AppFabricキャッシュをテスト中ですが、私はキャッシュに奇妙な問題があります。私は彼が3分間単純なオブジェクトをキャッシュする必要があると言っていますが、彼は約3秒間しかキャッシュしません。次のように私のキャッシュのAppFabricキャッシュが突然期限切れになる

設定は次のとおりです。

PS C:>は、Get-CacheConfigのデフォルト たcachename:デフォルト 生存時間:100分 CacheType:0 IsExpirable: セカンダリのパーティション真 EvictionType:LRU はNotificationsEnabled:

Use-CacheCluster 
Start-CacheCluster 
Grant-CacheAllowedClientAccount <myAccount> 
0123:私は、以下の3つのコマンドレットを使用して、このキャッシュを内蔵し

その後、私は次のプログラム(Program.csを)実行しよう:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.WriteLine("Press any key to continue, Q to quit"); 
     while (Console.ReadKey() != new ConsoleKeyInfo('q', ConsoleKey.Q, false, false, false)) 
     { 
      DoStuff(); 
     } 
    } 

    static void DoStuff() 
    { 
     Person p = null; 
     DataCacheItem cacheItem = CacheUtility.CurrentCache.GetCacheItem("jebas"); 
     if (cacheItem != null) 
     { 
      Console.WriteLine("V - Got my stuff from cache"); 
      p = (Person)cacheItem.Value; 
     } 

     if (p == null) 
     { 
      Console.WriteLine("! - I just did an expensive call"); 
      p = GetPerson(); 
      CacheUtility.CurrentCache.Add("jebas", p, new TimeSpan(0, 30, 0)); 
     } 
    } 

    private static Person GetPerson() 
    { 
     return new Person() { FirstName = "Jeroen", LastName = "Van Bastelaere", Id = Guid.NewGuid() }; 
    } 
} 

CacheUtilityクラス:

sealed class CacheUtility 
{ 
    private static DataCacheFactory _factory; 
    private static DataCache _cache; 
    private static readonly object _lock = new object(); 

    CacheUtility() { } 

    public static DataCache CurrentCache 
    { 
     get 
     { 
      lock (_lock) 
      { 
       if (_cache == null) 
       { 
        List<DataCacheServerEndpoint> servers = new List<DataCacheServerEndpoint>(); 
        servers.Add(new DataCacheServerEndpoint("demo2010a", 22233)); 
        DataCacheFactoryConfiguration config = new DataCacheFactoryConfiguration() 
        { 
         Servers = servers 
        }; 
        _factory = new DataCacheFactory(config); 
        _cache = _factory.GetDefaultCache(); 
       } 
       return _cache; 
      } 
     } 
    } 
} 

このプログラムを使用し、私はそれを実行し、金額のランダムなキーを押してくださいほとんどの場合、「キャッシュから取得しました」と言われていますが、3秒に1度、高価な呼び出しを行います。

PS C:>は、Get-CacheStatisticsのデフォルト

サイズ:0 ITEMCOUNT個:0 RegionCount:1 RequestCount:1543 彼はこれを持っているキャッシュをミスするとき私が得る-CacheStatisticsデフォルトでチェック ミスカウント:

サイズ:566 ITEMCOUNT個:1 RegionCount:1それがキャッシュ内にある場合には75

それは私にこれを提供しますRequestCount:1553 MISSCOUNT:私は(と、それはもうキャッシュに突然ではありません)私のプログラムを実行すると77

カウンタの合計が追い出さので、私は私のオブジェクトが立ち退かされることを伝えることができたのperfmonを使用してオブジェクトが上昇します。

私はそれはそれは私が現時点でキャッシュすることだし、サーバが左メモリをたっぷり(最大4GB +)を持っている唯一のオブジェクトだ、しかし排除されている理由はわかりません

誰が私のオブジェクトを取得するために私を助けることができます私はキャッシュに3秒の代わりにそれを求める30分のキャッシュ?

ヘルプは大歓迎です。事前に

おかげで、

のJeroen

+0

Apparantlyリソースの調整は、私は多くのメモリ(物理全体の90%を占めた約6のw3wpプロセス、1つのSQLと1つのOWSTIMERプロセスを持っていた、場所に入って来ましたメモリ)と合計空きメモリが物理メモリの15%未満になると、スロットルを開始します。 殺害プロセスが私の問題を解決しました(または実際には:iisreset :-)) –

+0

実際には解決済みとしてマークすることはできません。 –

答えて

1

物理メモリがWindows ServerのAppFabricのキャッシュ ホスト上で低くなり、キャッシュホストは、スロットリングと呼ばれる状態に入ることができます:-)。キャッシュ クラスタは、スロットル状態 を解決するために使用可能な物理メモリが増加するまで、スロットルされた キャッシュホストに存在するキャッシュにデータを書き込みません。

http://msdn.microsoft.com/en-us/library/ff921030.aspx

;)

関連する問題