2009-11-05 2 views
5

presentation Dan Farino (최고 시스템 설계자 MySpace.com)는 웹 기반 스택 덤프 도구를 보여 주며 주어진 프로세스에서 실행중인 모든 스레드를 카탈로그 화합니다 (수행중인 작업, 작업 시간Mdbg를 사용하여 ASP.NET 용 웹 기반 스택 덤프 도구를 사용 하시겠습니까?

이들 기술들은 또한 highscalability.com에 요약되어있다) 등을 수행하고 :

  • PerfCollector한다.
    중앙 집중식 성능 데이터 수집은 UDP입니다. Windows보다 안정적이고 은 모든 클라이언트가 연결하여 개의 통계를 볼 수 있습니다.
  • 웹 기반 스택 덤프 도구.
    문제가있는 서버 을 마우스 오른쪽 단추로 클릭하고 .net 관리되는 스레드의 스택 덤프를 가져올 수 있습니다. 시스템에 RDC 을 가지고 디버거를 연결해야하고 1/2 나중에 대답을 얻습니다. 천천히, 는 비창 용이고 지루합니다. 스택 덤프뿐만 아니라 스레드가 수행하는 작업에 대해 많은 컨텍스트를 제공합니다. 은 데이터베이스에서 90 개의 스레드가 차단되어 데이터베이스가 다운 된 것을 볼 수 있기 때문에 문제 해결이 더 쉽습니다.
  • 웹 기반 힙 덤프 도구.
    덤프 모두 메모리 할당. 개발자가 인 경우 매우 유용합니다. 그것을 수행하는 시간을 손으로 저장하십시오. • 프로파일 러. 요청을 시작부터 끝까지 추적하고 보고서를 생성합니다. URL, 메소드, 상태, 을 참조하십시오. 은 느린 요청을 나타냅니다. 잠금 경합을 살펴본 결과 예외가 발생했습니다. 흥미로운 내용 일 수도있는 입니다. 매우 가벼운 무게. 에있는 모든 VIP (100 대의 서버 그룹)의 하나의 상자에서 실행 중입니다. 샘플 1 스레드는 매 10 초입니다. 항상 에 추적 중입니다.

질문 : ASP.NET 용 웹 기반 스택 덤프 도구를 만드는 데 필요한 도구는 무엇입니까? 편의상 대상 AppDomain에서 호스팅되는 * .aspx가 해당 프로세스의 모든 관리되는 호출 스택을 출력 할 수 있다고 가정합니다. \ 프로그램 파일 :

는 일반적으로 C에서 발견 (CLR 2 SDK와 함께 출하 시작 C#을/IL로 작성 관리 코드 디버거) MDBG의 사용을 포함 몇 게시물과 mdbgcore 조립 있습니다 \ 마이크로 소프트 비주얼 스튜디오 8 \ SDK의 \ 2.0 \ 빈 :

해결책은 단순히이 어셈블리를 참조하여 원하는 출력을 생성합니까?"모든 관리되는 콜 스택"작업이 프로덕션 트래픽을 처리하는 실행중인 프로세스에 미치는 영향은 무엇입니까?

답변

3

.Net의 프로파일 링 API가 최선의 방법이라고 생각합니다.

Google 코드에서 SlimTune 프로젝트를 살펴보면 소스가 포함 된 라이브 샘플을 보면서 Asp.NET 시나리오에서 작동하도록 개선하고 개선하는 방법을 확인할 수 있습니다. 닷넷의 프로파일 링 API와 감사 마시모

2

당신은 서버를 중지해야하고 그것은 많은 CPU를한다 (그러나 그것은 당신에게 모든라는 방법을 완벽하게 제어 할 수 있습니다).

내가 가장 "가벼운 방법"해결책은 MDbg에서 이렇게하는 것인데, 다음을 수행하는 StackDump이라는 매우 작지만 유용한 작은 응용 프로그램을 함께 넣었습니다. 1) 디버거가 응용 프로그램을 중지하고 해당 프로세스에서 실행중인 모든 CLR 스택 2) 응용 프로그램이 다시 시작됩니다. 이 작업은 빠른 작업이며 변경되지 않은 프로덕션 코드로 실행중인 프로덕션 서버에서 실행할 수 있습니다 (어쩌면).

관리하려면 80 줄의 .Net 코드가 필요합니다. Codeplex에 source code을 게시했습니다.