문제

우리는 IIS6에서 이상하게 행동하는 asp.net 앱을 가지고 있습니다. 앱 자체는 간단한 ASP.NET 2.0 WebForms 거래입니다. 거기에는 너무 이상한 일이 일어나지 않습니다 (파이프 라인에는 몇 가지 HTTP 모듈이 있지만 이상한 생각은 없습니다 :)). 내가 이해하지 못하는 것은 페이지 실행 시간, 특히 ASP.NET Tracing (Trace.AXD)에 의해보고 된 시간과 클라이언트 (Fiddler)가 관찰 한 시간의 차이입니다. 앱이 개발자 상자 (WinXP, IIS5.1)에서 실행되면 ASP.NET 및 Fiddler가보고 한 시간이 매우 가깝습니다.

Page exec time             :  0.0919834
Fiddler Total Sequence time:  0.1560980 

60ms가 IIS에서 Fiddler로 5KB 상당의 데이터를 얻는 데 소비되는 것을 이해할 수 있습니다 (둘 다 동일한 기계 BTW에서 실행). 이제 코드를 서버 (Win2k3, IIS6)로 이동하면 그림이 크게 변경됩니다.

Page exec time             :  0.1702014
Fiddler Total Sequence time:  0.5156283 

이것은 동일한 페이지이며 Fiddler는 코드와 함께 같은 컴퓨터에서 다시 실행됩니다. 왜 같은 5KB를 배달하는 데 갑자기 350ms가 필요합니까?

추신. 두 컴퓨터에서 실제 머신의 호스트 이름 (예 :)을 통해 URL에 액세스하여 결과를 얻습니다. http : //machinename/app/page.aspx (반대로 http : //localhost/app/page.aspx).

pps. 구성 측면에서, 개발자 상자의 설정과 서버는 우리가 만들 수있는만큼 가깝습니다. 둘 다 동일한 web.config를 사용합니다. 둘 다 통합 인증으로 DB (SQL Server)를 쳤으며 결과적으로 앱은 도메인 계정에서 실행됩니다. 앱은 Forms 인증을 사용하며 가장하지 않습니다 (즉, 항상 동일한 계정으로 실행됩니다). 이제 IIS5에서 작동하는 방식은 IIS6과 다릅니다. IIS5에서 계정은 Machine.config의 태그에 지정되어 있으며 IIS6에서는 앱풀 설정입니다. 설정은 두 환경 모두에서 꽤 전형적인 것처럼 보이며 350ms 지연을 일으키는 것을 상상할 수 없습니다 ...

도움이 되었습니까?

해결책

MSDN 구독으로 우리가 얻은 귀중한 소수의 지원 사건 중 하나를 소비 한 후 마침내 "이 모든 시간이 어디에 있는지"질문에 대한 정답을 알고 있습니다. 요컨대, 시간은 파이프 라인에있는 HTTP 모듈에 소비됩니다. asp.net trace.axd에서보고 한 시간 측정은 .aspx 페이지 자체에 소요 된 시간 만, 모듈은 다음과 같습니다. 아니다 포함.

이를 확인하는 쉬운 한 가지 쉬운 방법 (그리고 모든 모듈이 그 일을하는 데 걸리는 시간을 확인하는 방법)는 ETW (Windows 용 이벤트 추적)를 사용하는 것입니다. 여기에 있습니다 설명 (이 게시물이 우리의 사건을 살펴본 후 작성된 후에 작성되었다고 강력히 의심합니다 :)) 위의 훌륭한 설명에 추가 할 수있는 한 가지는 내가 사용했다는 것입니다. svctraceviewer 트레이스 출력을 분석하기 위해 로그 패러 대신.

업데이트 : 위의 접근 방식은 Windows Server 2008에서도 작동합니다. 추적 설치.

다른 팁

전화하는 URL에서 추적 경로를 수행하고 비교하십시오. 나는 당신이 기계 내부에 머무르고있는 개발자 기계를 베팅하고 있지만, 생산 기계에서는 외부로 가서 IP 주소를 통해 다시 들어온다.

이 경우 호스트 파일에 이것을 추가하십시오 (c : windows system32 drivers etc hosts

www.mysite.com    127.0.0.1

이렇게하면 요청이 기계 외부에서 모험을하지 않도록 요청합니다. 응답 시간이 서로 일치하도록 시작해야합니다.

업데이트

새로운 업데이트가 주어졌습니다. 서버가로드중인 경우 생산에 대한 테스트를하는 동안 차이를 설명 할 수 있습니다. 이는 1 만 전달하려는 개발 기계보다 더 많은 요청을 적극적으로 제공하려고하기 때문에 차이를 설명 할 수 있습니다.

또는 두 가지 버전의 IIS, XP에서 5.1 및 2003의 6.0 버전을 테스트하고 있기 때문일 수 있습니다. 두 환경이 동일한 소프트웨어를 실행하지 않는 한 차이점을 설명 할 수 없습니다.

앱이 두 상자에서 동일한 릴리스 구성으로 실행 중입니까?

편집 : 요청 파이프 라인은 IIS5와 IIS6 사이에 엄청나게 변경되었으며 Trace.axd는 새로운 앱 풀과 http.sys 구성 요소가 아닌 ASP.NET 부분 만 볼 수 있습니다.

IIS6에서 구성을 조정할 수 있다고 생각하지만 아마도 가벼운 비 생산 웹 서버 (IIS5)와 개별 애플리케이션 풀이있는 강력한 웹 서버와 더 많은 추상화 계층의 차이를보고있을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top