2009-07-14 2 views
4

내 ASP.NET 웹 응용 프로그램에 대해 항상 높은 CPU 사용률을 보이고 있습니다 (라이브 프로덕션 상자에서만! ...). 나는 원인을 좁히려 고 노력하고 있습니다. 기본적으로 쿼드 코어 제온 박스와 그것을 할 수 있어야합니다 방법이 없습니다!ASP.NET 웹 응용 프로그램의 CPU 사용량을 프로파일 링합니다 - 데이터베이스는 아닙니다!

웹 프로세스의 CPU 사용량은 일반적으로 DB 프로세스의 CPU 사용량보다 높습니다.이 프로세스는 자체적으로 경보 벨을 울립니다.

그러나 표준 프로파일 링 도구 (dotTrace, Red Gate 등)를 사용하면 실제 CPU 사용량보다는 개별 메소드에 소요되는 시간 만 표시되므로 궁극적으로 DB 바인딩 된 메소드를 강조 표시 할 수 있습니다. 이것은 캐싱 또는 더 나은 인덱스를위한 기회를 나타낼 수 있지만, 그 자체가 웹 애플리케이션 프로세스의 CPU 사용량을 높이는 결과를 가져 오는 것은 아닌가?

내가이 범위를 좁힐 수있는 방법에 대한 제안이나 요령이 있으십니까?

감사합니다.

+0

Asp.Net 작업자 프로세스를 재활용하면 CPU 사용량이 다시 감소합니까? – Justin

+0

Viewstate를 해제 할 필요가 없으면 Global.asax 파일의 Application_BeginRequest 이벤트에 코드를 작성하여보기의 크기를 줄일 수 있습니다. –

답변

3

처음부터 시도해 볼만한 몇 가지 제안 사항입니다.

1. 배포 빌드로 배포 배포 된 제품이 릴리스 모드인지 확인하십시오. 디버그 모드로 실행하면 많은 수의 시간이 pdbs를 어셈블리와 함께로드하는 데 낭비됩니다.

2.Disable ViewState 필요없는 경우 viewstate를 사용하지 않도록 설정하십시오. ViewState는 숨겨진 필드에 저장된 데이터로 요청간에 지속됩니다. 페이지가 게재 될 때와 요청 될 때 페이지의 총 페이로드가 증가합니다. 또한 서버에 다시 게시되는 뷰 상태 데이터를 직렬화 또는 비 직렬화 할 때 발생하는 추가 오버 헤드가 있습니다. 마지막으로 뷰 상태는 서버의 메모리 할당을 늘립니다.

3.Disable 세션 상태 :

당신이 세션 상태를 사용하지 않도록 사용하지 않을 경우. 기본적으로 켜져 있습니다. 특정 페이지 또는 전체 응용 프로그램에 대해이 기능을 실제로 끌 수 있습니다.

몇 가지 기본적인 ASP.NET 응용 프로그램 성능 모니터링이 있으며,이 두 MSDN 기사 "Monitoring ASP.NET Application Performance"Performance Counters for ASP.NET

+0

설정 파일에서 디버그 모드를 끄는 것을 잊지 마세요. – itanex

0

다양한 방법을 호출하고 프로세서 사용에 미치는 영향을 확인하기 위해 일부 단위 테스트를 설정할 수 있습니까? Visual Studio에는 Team System을 사용하는 경우 몇 가지 테스트 도구가 내장되어 있지만 그렇지 않은 경우에도 수백 번 특정 함수를 호출하는 다중 스레드 테스터를 작성할 수 있습니다.

이 작업을 수행하는 방법에 대한 몇 가지 지침이 있으시면 기본 단위 테스트를 수행하는 데 도움이됩니다.

0

을 확인하면 처리되지 않은 예외를보고/기록된다? 그렇게하지 않으면 높은 CPD 스파이크에 해당하는지 확인하십시오. 스택 오버 플로우로 인해 스파이크가 발생할 수 있습니다. 또한 요청이 문제를 일으키는 페이지를 표시 할 수있다 대부분의 시간을 차지되는 HttpModule을하고 검사를 사용하여 각 요청의 시간을 레코딩에 볼 수 있었다

http://msdn.microsoft.com/en-us/library/ms998306.aspx

.

0

Pradeepno가 ​​지적했듯이, 시작해야 할 곳은 실제로 성능 카운터입니다. 이것은 CPU의 어느 부분을 소비하고 있는지에 대한 좋은 아이디어를 줄 수 있습니다.

DB 사용보다 높은 웹 응용 프로그램 사용은 완전히 놀랍지 않습니다. 괜찮은 DB 디자인을 가지고 있다면, 대부분의 웹 애플리케이션은 힘이없는 DB 서버로 인해 땀을 흘리게 될 것입니다.

관련 문제