2010-01-12 8 views
50

IIS6에서 실행되는 ASP.NET 웹 응용 프로그램은 CPU를 최대 100 %까지 주기적으로 실행합니다. 이 에피소드 동안 거의 모든 CPU 사용을 담당하는 것은 W3WP입니다. CPU는 몇 분에서 1 시간 이상까지 100 % 고정되어 있습니다.100 % CPU를 사용하는 W3WP.EXE - 시작 위치는 어디입니까?

이것은 준비 서버에 있으며이 지점에서는 사이트가 테스터의 트래픽이 매우 적습니다.

우리는 ANTS 프로파일 러를 서버에서 실행했지만 아직 밝혀지지 않았습니다.

어디에서 이러한 에피소드의 원인을 찾아 낼 수 있으며 그 시간 동안 어떤 코드가 CPU를 계속 사용하고 있습니까?

+0

에 페이지가 너무 많은 CPU 시간을 소비하는 것을보고 ('시간의 경과' 열) (결국 '모두보기'를 클릭하여 새로 고침) 귀하 암호? "Logger.Log (Exception)"과 같은 것을 호출합니까? – wtaniguchi

답변

34
  1. 표준 Windows 성능 카운터 (많은 GET 요청, 과도한 네트워크 또는 디스크 I/O 등의 상관 관계가있는 다른 활동을 찾습니다).
  2. 사용자 지정 성능 카운터 (특히 오프 박스 요청 및 실행 시간이 불확실한 다른 호출의 경우) 성능 모니터 (예 : CPU 사용량이 임계 값을 초과하는 경우 데이터 수집을 트리거) 당신이 테스트하거나 IIS 7로 업그레이드 할 수있는 경우와 같은 비주얼 스튜디오 팀 테스트와 같은 도구 또는 WCAT
  3. 를 사용
  4. 로드 테스트, 당신은 요청 시간
  5. 의 더 일정 금액을 가지고가는 경우에 추적을 생성하는 데 실패한 요청 추적을 구성 할 수 있습니다
  6. logparser를 사용하여 CPU 스파이크가 발생한 시점의 요청을 확인하십시오.
  7. 코드 검토/워크 스루 (특히 l
  8. CPU 및 메모리 프로파일 링 (프로덕션 시스템에서 어려움이있을 수 있음)
  9. (오류가 발생한 경우와 같이 잠금이 해제되거나 잠재적 인 스레딩 문제와 같이 올바르게 종료되지 않을 수있는 루프의 경우)
  10. 프로세스 탐색기
  11. Windows 리소스 모니터
  12. 자세한 오류 로깅
  13. (카운터 퍼포 레이션는 CPU 사용에 따라 아마도 조건) 실행 시간 정보
  14. 가 AppPool을이 재생 될 때 발생하는 오류인가를 포함하여 사용자 추적 로깅, ? 그렇다면 그것은 단서가 될 수 있습니다.
+6

나는 문제의 근원지로 우리를 데려다 줬던 기록을 단지 추가 할 것이다 : ** SQL Profiler **. 우리는 메모리 내 개체에 대한 참조를 포함하는 복잡한 LINQ to SQL 쿼리를 사용하여 전체 쿼리를 메모리로 변환 할 수 없었고 문자 그대로 수천 개의 작은 SQL 쿼리를 실행하여 조인을 수행했습니다. –

0

우리는 출력에 많은 데이터를 덤프하는 재귀 쿼리에서이 작업을 수행했습니다. 모든 작업이 종료되었는지, 무한 루프가 존재하는지 다시 확인 했습니까?

단일 페이지로 좁힐 수도 있습니다. 우리는 ANTS가 그 같은 경우에별로 도움이되지 않는다는 것을 알았습니다. - 우리가 한 일은 결국 사이트를 실행하는 것이 었습니다. CPU를 감시하는 페이지를 쳤습니다. CPU - 매우 조직적과 시간이 소요하지만 당신은 당신이 운이있을 수 있습니다 추적 일부 코드를 찾을 수 없습니다 경우 -

우리는 의심했다 페이지 세트로 추적하기 위해 IIS 로그 파일을 사용 할 수 있었다 -

희망이 도움이됩니다.

4

CPU가 100 %로 급상승하여 머물러 있다면 교착 상태 시나리오 나 무한 루프가 발생할 가능성이 큽니다. 프로파일 러는 무한 루프를 찾는 좋은 선택 인 것 같습니다. 교착 상태는 추적하기가 훨씬 어렵습니다.

+1

dotTrace 프로파일 러를 사용하고 "모든 스레드"가 "호출 트리"를 선택하면 대부분의 CPU가 하나의 호출 스택으로 그룹화 된 방법을 표시해야합니다.정확한 위치를 보려면 아래로 트랙하십시오. –

11

많은 답변은 아니지만 오래된 학교에 가서 IIS 프로세스의 이미지 스냅 샷을 캡처하고 디버깅해야 할 수 있습니다. 그녀는 또한 Tess Ferrandez의 블로그를 확인하고 싶어 할 것입니다. 그녀는 ** Microsoft의 에스컬레이션 엔지니어이며 그녀의 블로그는 Windows ASP.NET 디버깅에 중점을두고 있지만이 블로그는 일반적으로 디버깅하는 Windows와 관련이 있습니다. 내가 연결 한 ASP.NET 태그를 선택하면 유사한 여러 항목이 표시됩니다.

1

또한 perfmon 카운터를 살펴보십시오. 그들은 그 많은 CPU 시간이 소비되는 곳을 당신에게 말할 수 있습니다. 다음은 가장 일반적인 카운터에 대한 링크 사용의 :

4

Process Explorer 문제 해결을위한 훌륭한 도구입니다. 높은 CPU 사용의 문제점을 찾아내는 그것을 시도 할 수있다. 애플리케이션의 작동 방식에 대한 통찰력을 제공합니다.

또한 Procdump을 시도하여 프로세스를 덤프하고 CPU에서 실제로 발생한 것을 분석 할 수 있습니다.

-2

로드하는 데 시간이 걸리는 페이지를 식별하는 경우 SharePoint의 Developer Dashboard을 사용하여 시간이 걸리는 구성 요소를 확인하십시오.

+4

여기에 언급 된 셰어 포인트를 본 것으로 생각하지 않습니다. –

0

이것은 아마도 추측이지만 개발 팀은 릴리스 모드 대신 디버그 모드로 응용 프로그램을 빌드하고 배포 할 것입니다. 이로 인해 .pdb 파일이 발생합니다. 이것은 응용 프로그램이 시스템을 실행하는 동안 시스템 상태 및 디버깅 정보를 수집하기 위해 추가 자원을 사용하게되어 더 많은 프로세서를 사용하게된다는 것을 의미합니다.

따라서 릴리스 모드에서 빌드하고 배포하는 것이 충분히 간단합니다.

0

이것은 매우 오래된 게시물입니다.하지만 이것은 일반적인 문제이기도합니다. 제안 된 모든 방법은 매우 훌륭하지만 항상 프로세스를 가리키며 사이트가 문제가 있다는 것을 이미 알고 있다는 많은 기회가 있지만 처리하는 데 너무 많은 시간을 보내는 특정 페이지를 알고 싶습니다. 제 생각에 가장 정확하고 간단한 도구는 IIS 자체입니다.

  1. IIS의 왼쪽 창에서 서버를 클릭하기 만하면됩니다.
  2. 기본 창에서 '작업자 프로세스'를 클릭하십시오. 이미 너무 많은 CPU를 사용하고있는 응용 프로그램 풀을 보았습니다. 이 라인에
  3. 더블 클릭은 어떻게 든 내부 예외를 로그인하는이 풀
관련 문제