2014-09-25 3 views
1

이 질문을 전에 보았지만 응답은 내 필요에 맞게 조정되지 않았습니다. 매우 많은 양의 메모리를 사용하는 C# 응용 프로그램에서 힙 덤프를 분석하는 방법을 찾고 있습니다.거대한 C# 힙 덤프 분석 (10GB 이상)

하나의 문제는 제가 사용하고있는 도구가 x86이라는 것입니다. 이것은 몇 가지 매력적인 도구 (VS2013 Ultimate, Antz 메모리 프로파일 러, PerfView)의 경우입니다.

CLR 프로필러를 사용해 보는 데 많은 시간을 투자했지만이 방법은 작동하지 않는 것 같습니다 (편집 - 응용 프로그램에 첨부 할 때 작업).

지금 내 유일한 다른 옵션은 Windbg에 뛰어들 것이라고 생각합니다. 이것을 지원할 수있는 다른 도구가 있습니까?

감사합니다.

답변

0

나는 Windbg를 많이 사용했습니다. DumpHeap -stat은 어떤 물체가 넘치고 있는지 확인하는 빠르고 좋은 결과를 제공합니다. 운이 좋으면 호출에서 얻을 수있는 많은 데이터를 할당하는 단서가 쌓입니다.

개인적으로 PerfView가 훨씬 더 빠릅니다 (힙을 샘플링 함) .gcDump 파일에 덤프에서 필요한 데이터의 일부만 저장하기 때문에 개인적으로 PerfView가 훨씬 더 마음에 들었습니다. PerfView에서 힙 스냅 샷을 가져 와서 원래 덤프보다 훨씬 작은 본사로 보내실 수 있습니다 (보통 100보다 작음). 일부 문제가있는 36 GB 덤프를 PerfView로 분석했지만 Vance Morrison이 Stackoverflow가 발생한 곳에서 힙 탐색 코드를 수정하는 데 도움이되었습니다.

PerfView는 x86 일 수 있지만 덤프에서 데이터를 추출하는 내부 HeapDumper는 물론 64 비트입니다.

덤프가없는 대체 방법은 PerfView .NET 힙 샘플 할당 추적을 사용하는 것입니다. 이렇게하면 할당이 일어나는 코드로 바로 연결되는 모든 할당에 대해 호출 스택을 얻을 수 있습니다.

+0

통찰력을 가져 주셔서 감사합니다! 나는 이것을 게시 한 후 Windbg 탐험을 시작하기로 결정했다. 이것을 사용하여 덤프를 트래버스하고 CLR 프로파일 러에서 열 수있는 .log 파일을 추출 할 수있었습니다. 이것은 좋은 출발 이었지만 느린 과정이었습니다. 다음으로 돌아가서 PerfView에게 또 다른 기회를 줄 것입니다. x64 DMP와 함께 작동하지 않을 이유가있었습니다. 도움말 텍스트에서 읽은 것입니다. – thaynes