2011-10-21 1 views
2

현재 AppFabric 캐싱을 테스트하고 있지만 캐싱에 이상한 문제가 있습니다. 비록 그가 3 분 동안 간단한 객체를 캐쉬 할 필요가 있다고하더라도, 그는 단지 약 3 초 동안 만 캐시합니다.AppFabric 캐싱이 갑자기 만료 됨

PS C :> 가져 오기 - CacheConfig 기본 CacheName : 100 분 CacheType : 필요한 보조 분할 : 0 IsExpirable : 의 TimeToLive 기본 진정한 EvictionType을 : LRU를 다음과 같이

내 캐시의 설정은 다음과 같습니다 는 NotificationsEnabled :

Use-CacheCluster 
Start-CacheCluster 
Grant-CacheAllowedClientAccount <myAccount> 
: 나는 다음과 같은 3 커맨드를 사용하여이 캐시를 내장

거짓

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; 
      } 
     } 
    } 
} 

이 프로그램을 사용하여, 나는 단지 그것을 실행하고 금액을 임의의 키를 누르

는 그 후 나는 다음과 같은 프로그램 (program.cs)를 실행하려고 시간 : 대부분 "캐시에서 가져 왔습니다."라고 말하지만 3 초마다 한번 비싼 전화를합니다. 그는이 가지고있는 캐시 그리워 때 나는 GET-CacheStatistics 기본 확인하는 경우 :

PS C :> 가져 오기 - CacheStatistics 기본

크기 : 0 ITEMCOUNT : 0 RegionCount : 1 RequestCount : 1543 를 미스 카운트 :

크기 : 566 ITEMCOUNT : 1 RegionCount : 1이 캐시에있을 때 75

가 나에게이 있습니다RequestCount : 1553 미스 카운트는 : 내 프로그램을 실행 (그리고 더 이상 캐시에 갑자기 아니다) 때 77

내 객체가 퇴거됩니다 말할 수 있었다 성능 모니터를 사용하여 카운터 총 퇴거 객체가 상승하기 때문이다.

나는 내가 순간에 캐싱 해요 유일한 객체의 서버 메모리가 충분히 남아 (4기가바이트 +)를 가지고, 그것은 불구하고 퇴거하는 이유 아무 생각이

아무도 내 개체를 가져 도와 줄 수 30 초 동안 캐시되어 3 초가 아닌 캐시를 요청합니다.

도움말에 감사드립니다. 사전에

감사합니다,

제론

+0

Apparantly 히 자원 제한 나는 많은 메모리 (물리적 전체의 90 %를 차지했다 약 6 W3WP 프로세스, 1 SQL과 하나 개 owstimer 과정을 한 장소에왔다 메모리) 및 총 여유 메모리가 실제 메모리의 15 % 미만이면 스로틀을 시작합니다. 살인 프로세스가 나를 위해 문제를 해결했습니다 (또는 실제로 : iisreset :-)) –

+0

실제로 해결되었지만 아직 표시 할 수 없습니다. –

답변

1

물리적 메모리는 윈도우 서버 AppFabric 캐시 호스트 낮아지고, 캐시 호스트는 조절이라는 상태를 입력 할 수 있습니다 :-). 클러스터는 사용 가능한 실제 메모리가 증가하여 조절 상태가 이 될 때까지 스로틀 된 캐시 호스트에있는 캐시에 데이터를 쓰지 않습니다.

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

)