2012-07-06 6 views
0

응용 프로그램 코드가 환경 Windows Server 2003, iis 6.0이있는 프로덕션 서버에 배포됩니다. 절대 만료가 DateTime.Now.AddMinutes (30)로 설정된 응용 프로그램에 캐싱 코드가 있습니다. 우리는 HttpContext.Current.Cache 객체를 사용했습니다.IIS 6.0에서 지정된 시간이 지나면 캐시가 만료되지 않은 것 같습니다.

HttpContext.Current.Cache.Add(Scope,objectCache, 
             null, 
             DateTime.Now.AddMinutes(30), 
             Cache.NoSlidingExpiration, 
             CacheItemPriority.High, LifeStyleEvicted); 



private static void LifeStyleEvicted(string key, object value, CacheItemRemovedReason reason) 
{ 
var objectCache = ((IObjectCache)value); 
if (objectCache != null) objectCache.DisposeAndClear(); 
} 

따라서 30 분마다 캐시를 ​​다시 시작해야합니다. 31 분 초에 모든 요청은 정상보다 조금 더 오래 걸릴 것입니다. 그러나이 동작은 Windows 서버 2003 및 IIS 6.0에서 아직 관찰되지 않았습니다.

최근에 Windows Server 2008, IIS 7.5에 코드를 배포했습니다. 이 환경에서 31 분 초에 요청한 모든 요청은 정상보다 너무 오래 걸립니다.

누군가 Windows Server 2003 및 IIS 6.0에서이 동작이 왜 발생하는지 알려주실 수 있습니까?

미리 감사드립니다.

답변

0

일반적인 원인은 응용 프로그램 플러시 (캐시 플러시) 또는 웹 풀 다시 시작입니다. 30 분이 경과하기 전에 웹 풀이 다시 시작되면 캐시가 플러시되고 따라서 +31에서 스파이크가 표시되지 않습니다.

이벤트 로그를 검사하여 .NET 엔진에서 프로세스 재사용을 유발할 치명적인 오류가 있는지 확인하고 IIS의 재활용 시간을 확인하여 다르게 설정되지 않았는지 확인하십시오.

+0

일단 웹 풀을 시작하면 다시는 다시 시작하지 않습니다. 프로덕션 서버에서 며칠 동안 실행됩니다. 우리는 항상 이벤트 로그를 확인합니다. 오류도보고되지 않습니다. 우리는 프로덕션 서버에 대한 각 요청을 각 요청에 소요되는 시간과 함께 파일에 기록합니다. 앱을 시작한 후 31,61,91 ... 분마다 요청을 처리하는 데 더 긴 시간이 걸렸습니다. – user965291

+0

다시 시작하지 않고 재활용하는 방법은 무엇입니까? IIS는 일반적으로 X 시간 후에 응용 프로그램 풀을 재생하도록 설정됩니다. –

관련 문제