.NET (예 : 프로그램 충돌 후)에서 사후 분석에 어떤 가능성이 있습니까?

StackOverflow https://stackoverflow.com/questions/455122

  •  19-08-2019
  •  | 
  •  

문제

Windows 서비스로 사용되는 C# 프로그램이 있다고 가정 해 봅시다. 서비스가 거칠어졌고 CPU와 메모리가 미친 것처럼 소비하고 있다고 가정 해 봅시다. 생산 시스템이기 때문에 곧 다시 시작해야합니다. 따라서 런타임 정보를 수집 할 시간이별로 없습니다. 어쩌면 작업 관리자를 간단히 살펴 보겠습니다 ... 그게 전부입니다.

그 후, 내가 가진 모든 것은 log4net 로그 파일과 Post Mortem 분석을위한 Windows 이벤트 로그 만 있습니다.

문제의 이유를 찾았다 고 가정 해 봅시다. 다른 사람이 수정하고 프로그래머가 추가 로깅을 추가하므로 다음에 비슷한 문제를 더 빨리 찾을 수 있습니다. 그럼에도 불구하고 : 나는 여전히 로그 파일의 품질에 의존하며 다음 번에 문제가 어떻게 든 로그에서 스스로를 되 찾을 수 있기를 바랍니다.

사후 박격 분석을 수행하는 다른 방법도 있습니까? 스레드 덤프 (Java와 같은), 메모리 덤프 또는 다른 것과 같은 것이있을 수 있습니다. 사후 분석에 도움이 될 수 있습니까? 일부 빌드 인 .NET 프레임 워크 도구가 도움이 될 수 있습니까?

실제 프로젝트 경험 과이 유지 보수 질문을 해결하려고하는 방법에 관심이 있습니다. 대부분의 프로그래머에게는 매우 현실적이라고 생각합니다.

도움이 되었습니까?

해결책

Marc는 WindBG + SOS를 통해 많은 문제를 디버깅 할 수있게되면 Visual Studio에서는 실제로 다룰 수 없습니다. 훌륭한 튜토리얼이 있습니다 이 블로그.

메모리 문제의 경우 Perfmon의 .NET 성능 카운터를 볼 수도 있습니다. 물체가 어디에 있는지 (어떤 세대) 어디에 있는지, 그리고 쓰레기 수집에서 얼마나 많은 시간을 소비하는지 볼 수 있습니다. 유용한 정보를 제공해야합니다. 왜 객체가 수집되지 않는지 알고 싶다면 WindBG와 SOS가 갈 길입니다. 간단한 세션을 안내하려면 단계는 다음과 같습니다.

  1. 사용하기 힙을 검사하십시오 !dumpheap -stat, 많은 인스턴스를 찾으십시오. 당신은 아마 당신이 주어진 순간에 힙에서 무엇을 찾을 것으로 예상되는지에 대한 아이디어를 가지고있을 것입니다.

  2. 랜덤 인스턴스를 선택하고 a !gcroot 인스턴스의 주소에. 그것은 왜 객체가 수집되지 않는지 알려줄 것입니다.

  3. 반복하다

이벤트, 정적 및 파이널 라이저 대기열은 물건을 더 오래 살아야 할 후보자입니다.

당신은 또한 내 대답을보고 싶을 수도 있습니다. 이 질문 더 많은 Windbg 물건을 보려면.

다른 팁

.NET로 충돌 덤프를 수행하고 WindBG / SOS (및 Sosassist)로 볼 수 있습니다. 간단하지는 않지만 작동합니다. 그러나 상당히 하드 코어. " +windbg +.net"에 대한 검색은 흥미로워 야합니다.

그 외에 - 자원 카운터? 로그 파일? 당신이 볼 수있는 많은 것들이 상당히 쉽게 활성화 될 수 있습니다.

불행히도 나는 이것의 상당한 금액을해야했다 - 내가 겪은 가장 좋은 도구는 sdk와 함께 제공되는 cordbg입니다 (.NET 버전에 올바른 버전이 필요합니다). http://msdn.microsoft.com/en-us/library/a6zb7c8d.aspx 자세한 내용은.

cordbg (a <[pid]>)의 실행중인 프로세스에 연결하고 각 실행 스레드 (t <[tid]>)에 연결 한 다음 각 스레드 (w)의 스택을 덤프하십시오.

이 작업을 약간의 VB 스크립트로 자동화 한 다음 파일에 덤프하면이 도구를 여러 번 실행하여 출력을 파일로 캡처 할 수 있습니다. 모든 스레드 스택을 비교하면 애플리케이션이 어디에 지출되는지에 대한 좋은 아이디어를 얻을 수 있습니다.

이 접근법, 특히 덤프를 자동화하는 데있어 좋은 점은 모든 정보를 매우 빠르게 잡아서 가장 짧은 시간 내에 프로세스를 다시 시작할 수 있다는 것입니다.

WINDBG 및 SOS를 사용한 사후 분석을위한 훌륭한 리소스는 Tess Ferrandez입니다. 일련의 블로그 항목 주제에.

편집 : 링크 업데이트

프로세스가 여전히 살아 있다면 관리 스택 탐색기 그것이하는 일에 대한 빠른 스냅 샷을 얻기 위해 그것에 대항하십시오. 명시적인 설치없이 이것을 실행할 수 있습니다.

그 외에는 전체 덤프 + WindBG + SOS가 가장 많은 정보를 제공하지만, 그것을 얻는 것은 사소한 일이 아닙니다.

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