문제

IIS6에서 실행되는 ASP.NET 웹 앱은 정기적으로 CPU를 최대 100%까지 촬영합니다. 이 에피소드에서 거의 모든 CPU 사용을 담당하는 것은 W3WP입니다. CPU는 몇 분에서 1 시간 이상 100%에 고정되어 있습니다.

이것은 준비 서버에 있으며 사이트는이 시점에서 테스터로부터 매우 가벼운 트래픽을 얻고 있습니다.

우리는 서버에서 개미 프로파일 러를 실행했지만 조명이 밝아졌습니다.

이 에피소드의 원인을 어디에서 찾아야하고, 그 기간 동안 CPU를 바쁘게 유지하는 코드는 어디에서 찾을 수 있습니까?

도움이 되었습니까?

해결책

  1. 표준 Windows 성능 카운터 (많은 GET 요청, 과도한 네트워크 또는 디스크 I/O 등과 같은 다른 상관 관계 활동을 찾습니다) 코드와 Perfmon에서 읽을 수 있습니다 (예 : CPU 사용이 임계 값을 초과하는 경우 데이터 수집을 트리거하려면)
  2. 사용자 정의 성능 카운터 (특히 오프 박스 요청 및 실행 시간이 확실하지 않은 기타 통화 시간까지)
  3. Visual Studio Team Test 또는 WCAT와 같은 도구를 사용하여로드 테스트
  4. IIS 7로의 테스트 또는 업그레이드를 할 수 있다면 요청에 더 많은 시간이 걸리면 추적을 생성하기 위해 실패한 요청 추적을 구성 할 수 있습니다.
  5. CPU 스파이크 당시에 도착한 요청을 확인하려면 LogparSer를 사용하십시오.
  6. 코드 리뷰 / 연습장 (특히 오류가 발생하는 경우와 같이 제대로 종료되지 않을 수있는 루프를 찾으십시오.
  7. CPU 및 메모리 프로파일 링 (생산 시스템에서 어려울 수 있음)
  8. 프로세스 탐색기
  9. Windows 리소스 모니터
  10. 자세한 오류 로깅
  11. 실행 시간 세부 정보를 포함한 사용자 정의 추적 로깅 (아마도 CPU 사용 성능 카운터를 기준으로 조건부)
  12. 앱풀이 재활용 할 때 오류가 발생합니까? 그렇다면 단서가 될 수 있습니다.

다른 팁

답은 많지 않지만 구식 학교로 가서 IIS 프로세스의 이미지 스냅 샷을 캡처하고 디버깅해야 할 수도 있습니다. 체크 아웃하고 싶을 수도 있습니다 테스 페란데즈블로그 - 그녀는 킥 A ** Microsoft 에스컬레이션 엔지니어이며 블로그는 Windows ASP.Net 디버깅에 중점을 두지 만 블로그는 일반적으로 Windows 디버깅과 관련이 있습니다. ASP.NET 태그 (내가 링크 한 것)를 선택하면 비슷한 몇 가지 항목이 표시됩니다.

CPU가 100%로 급증하고 거기에 머무르면 교착 시나리오 또는 무한 루프가있을 가능성이 높습니다. 프로파일 러는 무한 루프를 찾는 데 좋은 선택처럼 보입니다. 그러나 교착 상태는 추적하기가 훨씬 어렵습니다.

프로세스 탐색기 문제 해결을위한 훌륭한 도구입니다. 높은 문제를 찾기 위해 시도해 볼 수 있습니다. CPU 용법. 응용 프로그램이 작동하는 방식에 대한 통찰력을 제공합니다.

당신은 또한 시도 할 수 있습니다 ProcDump 프로세스를 버리고 CPU에서 실제로 일어난 일을 분석합니다.

또한 Perfmon 카운터를보십시오. 그들은 CPU 시간이 많이 소비되는 곳을 알려줄 수 있습니다. 다음은 사용할 가장 일반적인 카운터에 대한 링크입니다.

우리는 이것을 출력에 수많은 데이터를 덤프하는 재귀 쿼리에 이것을 가지고있었습니다. 모든 것이 종료되고 무한 루프가 존재하지 않음을 두 번 확인 했습니까?

단일 페이지로 좁히려고 할 수도 있습니다. 우리는 같은 경우에도 많은 도움이되지 않는다는 것을 알았습니다. 우리가 한 일은 사이트를 치르는 것이 페이지를 쳤습니다. 시간이 많이 걸리지 만 코드 추적으로 찾을 수 없다면 운이 좋지 않을 수 있습니다.

IIS 로그 파일을 사용하여 의심되는 페이지 세트로 추적 할 수있었습니다.

도움이되기를 바랍니다!

이것은 기껏해야 추측이지만, 개발 팀이 릴리스 모드의 스테드에서 디버그 모드로 응용 프로그램을 구축하고 배포하고있을 것입니다. 이로 인해 .pdb 파일이 발생합니다. 이에 따라 애플리케이션이 시스템 실행 중에 시스템 상태를 수집하고 정보를 디버깅하기 위해 추가 리소스를 사용하여 더 많은 프로세서 활용을 유발한다는 것입니다.

따라서 릴리스 모드로 빌드 및 배포 할 수있을 정도로 간단합니다.

이것은 아주 오래된 게시물이지만, 이것은 또한 일반적인 문제이기도합니다. 제안 된 모든 방법은 매우 좋지만 항상 프로세스를 가리킬 것이며, 우리 사이트가 이미 문제를 일으킨다는 것을 이미 알고있을 가능성이 많지만, 특정 페이지가 처리에 너무 많은 시간을 소비하는 것을 알고 싶습니다. 제 생각에 가장 정확하고 간단한 도구는 IIS 자체입니다.

  1. IIS의 왼쪽 창에서 서버를 클릭하십시오.
  2. 메인 창에서 '작업자 프로세스'를 클릭하십시오. 당신은 이미 어떤 응용 프로그램 풀이 너무 많은 CPU를 복용하고 있는지 알 수 있습니다.
  3. 이 줄에서 너무 많은 CPU 시간 ( 'Time Elapsed'열)을 소비하는 페이지를 확인하려면이 라인을 두 번 클릭하십시오 ( 'All Show'를 클릭하여 새로 고침)

로드하는 데 시간이 걸리는 페이지를 식별하면 SharePoint를 사용하십시오. 개발자 대시 보드 어떤 구성 요소가 시간이 걸리는지 확인합니다.

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