2011-09-26 7 views
1

나는 전에 본 적이없는 몇 가지 일을하는 웹 사이트를 운영하고 있습니다. 내 서버 승 승 승/IIS6 나는 C# 및. 넷 4.0 사용하고 있습니다.사이트가 너무 오래 지났습니까?

사이트는 내 데이터베이스에 직접 데이터를 저장하는 부동산 웹 사이트입니다. 이 사이트는 잠시 동안 잘 돌아가고 그냥 죽을 것입니다. 내 말은 재산의 세부 정보를 보려고하는데 사이트가로드되는 데 2-3 분이 걸릴 것입니다. web.config 파일을 다시 저장하고 다시 업로드하여 응용 프로그램을 다시 시작하면 잠시 동안 정상적으로 실행 된 다음 다시 죽을 것입니다. 이것은 계속 반복됩니다. 라이브 사이트가 "죽었다"는 동안 로컬 복사본으로 갔고 로컬 복사본은 정상적으로 실행되고 그 후에도 오랫동안 죽을 것입니다. 소요되는 시간은 5 분에서 30 분으로 다양합니다. 요청 횟수와 관련이 있다고 생각합니다.

누구에게 무슨 일이 일어나고 있는지 알 수 있습니까?

public Listing GetListingByMLNumber(string MLNumber) 
{ 
    try 
    { 
     DatabaseDataContext db = new DatabaseDataContext(); 
     var item = (from a in db.Listings 
        where a.ML_.ToLower() == MLNumber.ToLower() 
        select a).FirstOrDefault(); 

     return item; 
    } 
    catch (Exception ex) 
    { 
     Message = ex.Message; 
     return null; 
    } 
} 
+0

은 serverfault에 속해 있습니다. –

+5

사용 후 (즉, 'using'문 사용) DataContext 폐기를 고려 했습니까? – Zruty

+0

디버깅하는 가장 좋은 방법은 로깅을 활성화하는 것입니다. 리소스 제한 (리소스 사용량이 너무 많고 연결을 기다릴 필요가 있습니다.)) –

답변

2

폐쇄하지 데이터베이스 컨텍스트는 사용자가 제공 한 코드에 명백한 오류로 눈에 띄는 : 페이지의 데이터 만 조회는 아래의 LINQ 쿼리입니다 주요 데이터를 가져 오는 것입니다. using 문에 포장하여 올바르게 폐기되었는지 확인하십시오.

컨텍스트가 살아있는 한 제한된 리소스 인 SQL 연결을 유지합니다. 또한 반환 한 항목을 변경 추적하여 메모리를 낭비합니다. 주어진 코드에서 컨텍스트는 가비지 수집되어야하지만 여전히 문제가 될 수 있습니다. (이것이 문제 이건 아니건간에 데이터베이스 컨텍스트를 처리해야합니다.)

로컬에서 부하 테스트를 시도하여 문제를 재현 할 수 있는지 확인하십시오. 가능한 경우 디버거를 사용하여 문제를 파악하십시오. 그렇지 않은 경우 문제를 좁히기 위해 로깅을 추가해야 할 수 있습니다.

또한 IIS 프로세스에서 메모리, 핸들 등의 불합리한 양을 사용하는지 확인할 수 있습니다. 또한 다른 대답에서 제안하는 것처럼 성능 및 응용 프로그램 풀에 대한 IIS 설정을 확인하십시오.

+0

안녕 얘들 아, 감사합니다. 실제로 문제를 발견했으며 LINQ와 전혀 관련이 없습니다. 페이지에 센터 화 된 소스에서 사진을 다운로드하는 또 다른 방법이 있습니다. 사진을 연결하기 전에 HttpWebRequest를 사용하여 사진이 존재하는지 확인했습니다. 시간 제한을 지키는 것은이 요청이었습니다. 나는 약간의 수정을했으며 현재 잘 작동 중이다. DrIIS - 나는 처분을 확실히 이행 할 것입니다. 나는 네가 그렇게 할 필요가 있다는 것을 깨닫지 못했다. 도와 주셔서 감사합니다! 행운을 빌어 요! – Ricketts

+0

"컨텍스트가 살아있는 한 제한된 리소스 인 SQL 연결을 유지하게됩니다." - 실제로는 그렇지 않습니다. L2S 및 L2E 컨텍스트는 쿼리가 끝나자 마자 연결 풀로 다시 연결을 해제하고 필요할 때 새 연결을 설정하므로 처분하면 아무 것도 릴리스되지 않습니다. 그래도 여전히 좋은 연습입니다. – Mant101

0

작업자 프로세스를 재활용하는 방법을 보려면 응용 프로그램 풀 설정을 살펴보고 IIS의 성능 탭에서 대역폭 임계 값이 지정되어 있는지 확인합니다.

0

이 유형의 문제가 다시 발생하면 Diagnostic Toolbelt에 DebugDiag/ADPlus 및 WinDBG를 추가해야합니다.

응용 프로그램이 다시 중단되거나 요청에 응답하는 데 너무 오랜 시간이 걸리면 DebugDiag 또는 ADPlus를 사용하여 작업자 프로세스의 덤프를 가져옵니다. 이것을 WinDBG에로드하고 관리 코드 디버깅을위한 WinDBG 확장 인 SOS (Son of Strike)를로드하고 파기를 시작하십시오.

테스 Ferrandez이 효과적으로 도구를 사용하는 방법에 대한 자습서 및 실험실의 큰 집합이 있습니다

.NET Debugging Demos - Information and setup instructions

그들은 몇 피클에서 나를 왔 여러 번과 잘입니다 그 (것)들에 익숙하게하는 시간을 소요 가치가있다.

관련 문제