2012-06-28 4 views
0

공유 서버에 호스팅 된 Asp.net 응용 프로그램이 있습니다.Asp.Net 응용 프로그램이 다시 시작되어 캐시가 큽니다.

캐시 개체가 거의 없습니다. 하나의 캐시 객체에는 3 개의 열이있는 약 1 백만 개의 레코드가 들어 있습니다. 나머지 캐시 오브젝트에는 수백 개의 레코드 만 있습니다.

모든 레코드가 정적입니다. 이러한 레코드는 변경되지 않으며 자동 완성 아약스 호출에 표시됩니다.

SQL Server 2008을 사용하여 데이터를 저장하고 있습니다.

<compilation debug="false" targetFramework="4.0"> 
응용 프로그램은 내가 그것을 설정하면보다 더 때때로 시작

TRUE

내 코드 :

protected void Application_Start(object sender, EventArgs e) 
    { 

     Global.CacheInfo += "Started on" + "----" + DateTime.Now + "<br/>" + Environment.NewLine; ; 


     RegisterRoutes(RouteTable.Routes); 

     RouteTable.Routes.RouteExistingFiles = true; 

     using (BEntity context = new BEntity()) 
     { 
      // Adding Items to Cache 
      BLSuggestion.GetAllTitle(); 
      BLSuggestion.GetAllSubCategories(); 

     } 

     PerformanceCounter pc = new PerformanceCounter("ASP.NET Applications", "Cache % Machine Memory Limit Used", "__TOTAL__", true); 
     Global.CacheInfo += string.Format("{0:0.00}%", pc.NextValue()); 

    } 

이 값은 주위에 관해서

나는 다음을 설정하는 경우 응용 프로그램이 시작되면 95 %. 나중에 몇 가지 캐시 개체가 만들어집니다. 그러나 그 후에도 약 1 분 후에 응용 프로그램이 다시 시작됩니다.

감사의 말을 전하면됩니다.

+0

캐시 (GetAllTitle 및 GetAllSubCategories)가 채워지는 코드는 무엇입니까? 이 캐시가 모든 메모리를 소비하는 경우 메모리에 데이터를 캐시하는 더 보수적 인 방법이있을 가능성이 큽니다. – hatchet

답변

1

특정 (사용자 정의) CPU/메모리 임계 값에 도달하면 IIS가 자동으로 응용 프로그램을 다시 시작합니다. 메모리에 많은 정보를 저장하고 있기 때문에이 임계 값에 도달했으며 IIS는 구성에서 지시 한대로 AppDomain을 단순히 사용하여 응용 프로그램이 많은 메모리를 차지하지 않도록합니다. 이것은 종종 공유 호스팅 제공 업체가 수행합니다. 따라서 공급자에게 응용 프로그램이 실행되도록 구성된 제한이 무엇인지 물을 수 있습니다.

+0

캐시 전에 현재 제한 예제가 무엇인지 프로그램 적으로 파악할 수 있습니까? 제한은 무엇이고 캐시는 제한 후 무엇입니까 – Moons

+0

IIS에서 제한이 구성됩니다. 'Microsoft.Web.Administration'을 사용하여 프로그래밍 방식으로 찾을 수는 있지만 공유 호스팅에 관해 언급 한 내용 때문에 관리자가 서버에 대한 권한이 필요합니다. 간단히 공급자에게 문의하십시오. –

+0

SO 캐시 % 시스템 메모리 제한 사용에 아무런 역할이 없습니까? 내가 알아 낸 것은 캐싱 없이는 약 90 %이고 캐싱은 약 90-95 %입니다. 모든 것이 CPU/메모리에 달려 있습니다. – Moons

관련 문제