w3wp.exe의 기능을 어떻게 알 수 있습니까? (또는 성능 문제를 진단하는 방법)


42

Google에서 만든 사이트에서 성능 문제가 발생하여 진단을 시작하는 방법을 정확히 모릅니다.

간단한 설명은 다음과 같습니다. 트래픽이 거의없는 매우 작은 사이트 ( http://hearablog.com )가 크 래피 전용 서버에 있고 CPU가 항상 매우 높으며 때때로 100 분 동안 100 분을 유지하며 w3wp.exe 대부분을 차지하고 있습니다. 일반적인 시나리오는 w3wp.exe는 60 %, SQL Server는 약 30 %입니다. 우리 DB도 꽤 작습니다.

자세한 설명 및 자세한 내용 :

  • 이 사이트는 Cari.Net에 의해 매우 거친 서버에 호스팅됩니다. 처음부터 서버가 제대로 작동하지 않는다는 느낌이 들었습니다. 일부 작업은 너무 오래 걸리므로 구성에 문제가있을 수 있습니다. 또한 서버가 상당히 느린 경향이 있다는 점을 제외하고는 가상 서버가 전용 서버를 보유하고있는 동안 가상 서버를 얻는 것일 수도 있습니다.

  • 서버는 SQL 2008 Express가 포함 된 Windows 2008 Standard 64 비트입니다.

  • 하드웨어는 Celeron 2.80 GHz, 1Gb RAM입니다

  • 이 웹 사이트는 데이터 액세스를 위해 Entity Framework를 사용하여 ASP.Net MVC로 개발되었습니다.

  • 자, 이것은 꽤 엉뚱한 하드웨어이지만, 이와 같은 (또는 더 나쁜) HW를 가진 이들 서버를 가진 다른 서버를 가지고 있으며, 이것보다 성능이 훨씬 좋습니다. 즉, 다른 서버에는 W2003 및 SQL2005가 있으며 ASP.Net "WebForms"2.0, MVC, LINQ, EF 없음을 사용하고 있습니다. 2008 년에 갈지 여부 / 다른 것들이 큰 성능 저하가 예상되는지 여부는 확실하지 않습니다.

  • MP3 파일 (5-20 Mb)을 정기적으로 제공하고 있는데, 이는 약간 특이한로드이며, 이는 어떤 종류의 문제를 일으킬 수 있습니까?
    이것이 w3wp가 많은 CPU를 사용하게합니까?

  • 디스크 사용량이 매우 낮은 것 같습니다. 메모리는 일반적으로 약 90 %이지만 디스크 사용량은 페이징이 많지 않은 것으로 보입니다.

  • 내가 얻을 t 우리의 모든 쿼리가 매우 간단 있지만 30 초 이상 복용 쿼리, SQL 시간 제한에 대해 매일 전자 우편의을 (또는해야하지만, EF 그것을 망쳐 할 수있다).

이것은 유용한 정보가있는 경우를 대비하여 100 % CPU의 "스프린트"중 하나에서 리소스 모니터의 모양입니다.

대체 텍스트

그리고 일부 성능 카운터의 스냅 샷 : 대체 텍스트

이제 나를 혼란스럽게하는 것은 w3wp의 CPU 사용량이 너무 높다는 것입니다. 그렇게 많이해서는 안됩니다 ... 그래서 내 질문은 ...

  • 그것이 무엇을하고 있는지 알아내는 방법이 있습니까? 어쩌면 프로필을 작성 하시겠습니까?
  • 보고있는 성능 카운터가 있습니까?
  • 이 하드웨어 / 소프트웨어 구성이 주어질 것으로 예상됩니까?
  • 이것은 일종의 구성 실패로 인한 것일 수 있습니다. 어디에서 시작 하시겠습니까?

대단히 감사합니다.
다니엘 마 글리 오라

답변:


42

IIS 관리자에서 작업자 프로세스 UI를 사용하여 현재 실행중인 요청을 검사하고 요청이있는 위치에서 중단되는 부분을 확인할 수 있습니다. IIS 관리자-> 트리에서 서버 클릭-> 작업자 프로세스 더블 클릭 아이콘-> CPU를 소비하는 작업자 프로세스를 두 번 클릭하여 현재 실행중인 요청을 실시간으로 확인하여 어떤 모듈이 시간이 걸리는지 볼 수 있습니다.

또한 요청 당 시간의 일부를 추적하여 요청이 오래 걸리는 위치를 확인하려면 실패한 요청 추적을 사용하십시오.


2
이것은 유망한 것으로 실제로 실제로보고 싶은 것 같지만 실제로는 화면이 비어 있습니다. 큰 사인에 따르면 1 초 이상 걸리는 요청 만 분명히 표시되며 목록이 비어 있기 때문에 분명히 우리의 요청은 없습니다. 더 많은 요청을 표시하는 방법에 대한 아이디어가 있습니까? 1s 필터를 낮추는 방법? 감사!
Daniel Magliola

1
필터에 0을 입력하고 이동을 클릭하면 0 초로 설정됩니다. 또한 관리자 권한 명령 프롬프트 "% windir % \ system32 \ inetsrv \ appcmd.exe 목록 요청"에서 실행할 수 있습니다.
Carlos Aguilar Mares

1
카를로스 감사합니다! 이것은 5 분마다 서버를 죽이는 하나의 요청 (우리가 가지고있는 cron)을 찾기 위해 끝내는 일입니다 (실행하는 데 3.5 분이 걸렸으므로 거의 100 % CPU였습니다). 감사!!!
Daniel Magliola

1
이 UI는 어떤 URL에 액세스했는지 알려줍니다. 불행히도 asmx 웹 서비스에 대한 POST이며 해당 데이터를 사용할 수 없습니다. (headbang)
Ross Presser

5

좋아, 시작하려면 서버가 정말 엉망입니다. 그러나 충분해야합니다.

  • 가상화를 위해 드라이버를 확인하십시오. 나는 CPU를 숨기는 가상화 플랫폼이 없다는 것을 알고 있습니다 (그리고 누군가가 셀러론에 hyper-v 또는 esx를 넣는 것을 용인합니다). 그러나 디스크 등의 드라이버는 표시입니다.

  • CPU가 그렇게 높으면 안됩니다. 슬프게도,이 RAM을 사용하면 토스트가 거의 발생합니다. 프로파일 러를 추가하기 시작하면 메모리가 거의 날려 버릴 것입니다.

나는 :

  • 이 시점에서 실행중인 항목에 대한 로그를 확인하십시오.
  • OS를 2008 R2로 업그레이드하십시오. 자세한 정보가 여기에 있습니다.

시험용:

  • 개발 환경에서 사이트를 복사하고 성능 테스트를 실행하십시오.
  • 거기서 프로파일 링하십시오.
  • 실패한 요청 추적을 사용하여 실패한 요청을 찾으십시오.

http://learn.iis.net/page.aspx/266/troubleshooting-failed-requests-using-tracing-in-iis-7/

거기에 약간의 시작이 있습니다. 문제가 더 많은 경우에 대비하여 힌트를 줄 수 있습니다.

또한 장기적인 성능 로그를 유지합니다. IO를 조심하십시오 (초 / 읽기, 초 / 쓰기는 거의 관련이 있습니다). 나머지는 모두 IO 현명한 것이 모호하지만 IO가 예상보다 오래 걸리면 디스크가 뒤떨어집니다.

이 시점에서 최소한 기본 표시기로 구성 문제를 배제합니다. 무언가가 W3p 리소스를 소모하므로 이제 무엇인지 알아 내야합니다.

일반적으로 이것은 물리적으로 사용하고 싶은 서버가 아닙니다. 너무 작아서 기계를 가지고 있다는 것은 의미가 없습니다. 가상이 더 나을 것이다;)


대답 해 주셔서 감사합니다. 몇 가지 질문 :이 시점에서 어떤 로그가 실행되고 있는지 확인 하시겠습니까? (이것이 초보자 질문이라면 죄송합니다)-OS 업그레이드 : 시도해 볼 수도 있지만 물건을 깰 수도 있습니다. 어떻게 안전합니까? -개발 환경 : 문제는 개발 환경에서 제대로 작동한다는 것입니다. CPU는 무시할 수 있고 요청도 실패하지 않습니다.
Daniel Magliola

I / O 로그의 경우 : 방금 언급 한 카운터를 추가했으며 CPU가 높으면 모두 0입니다. 방금보고있는 성능 카운터의 스크린 샷을 추가했습니다. 스냅 샷이 전체 스토리를 전달하지는 않지만 이러한 값은 상당히 안정적인 경향이 있습니다. 현재 연결 수 (설명하지 않은)가 문제가 될 수 있다고 생각하십니까? 해당 연결이 요청하거나 수행하는 것을 파악하는 방법에 대한 아이디어가 있습니까? 이와 같은 진단에 유용한 다른 카운터가 있습니까?
Daniel Magliola

R2는 꽤 안전합니다. 나는 모든 것을 업그레이드했고 아무런 문제가 없었습니다. 어쨌든 .... 이것은 CPU 문제이며 프로파일 러를 설치하기에 충분한 RAM을 가지고 있지 않다면 특히 끔찍할 수 있습니다. 실제로 완전한 재설치를 시도합니다. 그렇습니다.하지만 R2를 새로 설치하고 문제가 지속되는지 확인할 수 있습니다. 나쁜 점은 예약 시스템을 갖추지 않아서 문제가 "로컬"인지 또는 더 일반적인 것인지 식별 ​​할 수 없다는 것입니다. 또는 : IIS를 중지하고 사용중인 모든 임시 폴더
TomTom

컴파일하고 다시 시작할 때 발생하는 상황을 확인하십시오. R2를 사용하면 IIS가 어떤 파일을 열어 놓았는지 확인할 수 있습니다. 이것은 하나의 웹 응용 프로그램에만 해당됩니까, 아니면 모든 웹 사이트가 중지 된 경우에도 있습니까? 다음으로 시도해야 할 것-모든 사이트를 끄고 어느 사이트에서 문제가 발생했는지 확인하십시오.
TomTom

마지막으로, 가상 서버의 문제점은 내가 찾은 한 동일한 하드웨어에 대해 더 많거나 같은 비용을 지불하고 대역폭 청구가 적다는 것입니다 (오디오 파일을 제공한다는 것을 명심하십시오). 우리가해야 할 경우 더 큰 서버로 이동할 것입니다. 그러나 정직하게도, 우리가 가지고있는 트래픽에 문제가있을 것입니다. 100 % CPU를 사용해서는 안됩니다.
Daniel Magliola

4

Process Explorer 라는 프로그램을 사용 하여 w3wp 프로세스에서 실행중인 개별 스레드를 모니터 할 수 있습니다. 어떤 스레드가 모든 손상을 일으키는 지 확인할 수 있어야합니다.



1

나는이 시점에서 특히 Virtual에서 더 나은 마일리지를 얻는 것에 대해 TomTom에 동의합니다. 문제를 좁히기 위해 로컬에서 디버깅 / 프로파일 링하는 것이 옳은 일입니다.

Karnak The Magnificent 모자와 망토를 쓰고 첫 번째 봉투를 요구할 것입니다. 램 반란. OS, ASP.NET 및 욕심 많은 SQL Server Express를 1GB에 넣으면 무엇을 얻을 수 있습니까?

귀하의 문제는 SQL Server Express가 버퍼 풀에 사용 가능한 모든 RAM을 가져 와서 느리게 릴리스한다는 것입니다. 자세한 내용은 http://support.microsoft.com/kb/321363 을 참조하십시오. 또한 IIS에는 기본 캐시가 256MB이며 조정해야 할 수도 있습니다 ( https://stackoverflow.com/questions/2853135/controlling-asp-net-output-cache-memory-usage ). 디버그 진단 은이 문제를 해결하는 데 유용한 도구입니다 (아마도 망치).

http://technet.microsoft.com/en-us/library/bb742546.aspx 는 꽤 괜찮은 기사입니다. http://social.technet.microsoft.com/forums/en-US/sharepointadmin/thread/706c653a-16b0-4696-85ee-9ae3552a582e 는 또 다른 가능한 문제로 앱 풀 재활용이 사라 졌다고 지적합니다.


1

Perfmon의 "프로세스"카운터를 사용하여 w3wp.exe 프로세스의 개별 속성을보십시오. 작업자 프로세스의 CPU 시간은 커널 시간입니까? 커널 시간이 높으면 페이징을 나타낼 수 있지만 확신이 없다고합니다. 다른 가능성은 더프 드라이버입니다. 작업자 프로세스에는 23 개의 스레드가 활성화되어 있지만 어떤 작업을 수행하고 있습니까? SysInternals의 ProcessExplorer를 사용해보십시오. 또한 사용중인 TCP / IP 연결을 확인할 수 있습니다. SQL Express를 사용하지는 않았지만 빅 브라더와 같은 메모리 튜닝 매개 변수가 있습니다. SQL이 IIS의 메모리를 고갈시켜 과도한 페이징을 유발합니까?


w3wp 프로세스에 대해 % processor 시간과 % user time 카운터를 추가했으며 서로 완벽하게 일치합니다. 그것은 커널 시간이 없다는 것을 의미합니까, 아니면 이것을 잘못보고 있습니까? (죄송합니다, 저는 초보자입니다)
Daniel Magliola

0

완전히 관련이 없지만 쿼리에서 NOLOCK을 사용하고 있는지 확인하십시오. SQL 시간 종료의 경우 도움이 될 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.