본문 바로가기
Windows

DebugDiag - Process Memory Dump 수집 및 분석 방법

by 올엠 2020. 11. 27.
728x90

클라이언트/서버를 개발하여 사용하던중 불특정하게 프로그램이 종료되거나 과도한 시스템 리소스를 사용하는 경우가 있다. 이를 분석하기 위해서는 해당 시점에 발생했던 이벤트와 실제 처리하던 코드를 확인하면 원인 분석과 해결을 보다 빠르게 진행할 수 있다. 

만약 여러분이 개발한 프로그램이 이러한 상황이라면, 이벤트를 모니터링하고, 메모리 덤프를 수집해야 할 것이다.

이때 어떻게 메모리 덤프를 수집할까?

윈도우에서 프로세스 덤프를 수집할 수 있는 방법은 몇가지 있다. 그중 가장 간단한 방법으로는 작업 관리자에서 프로세스를 선택하고 마우스 우 클릭을 통해 메모리 덤프를 생성하는 것이다.

 

작업 관리자에서 프로세스 덤프를 쉽게 생성할 수 있다

DebugDiag 2.3

하지만 이 방법은 오류 발생이나 문제점을 확인하고 싶은 상황(예외 발생, 메모리 오류, CPU 과다 사용등) 직접 수집해야 하는 어려움이 있고, 실제 수집을 위해 들어갔다면 이미 늦은 상황일 수 있으므로 사전에 특정 상황에 메모리 덤프를 수집하도록 하여야 한다. 그리고 마침 이를 도와주는 도구가 바로 Debug Diagnostics Tool이다.

현재 v2.3 버전까지 사용할 수 있다.

https://www.microsoft.com/en-us/download/details.aspx?id=58210

 

DebugDiag2.3

The Debug Diagnostic Tool (DebugDiag) is designed to assist in troubleshooting issues such as hangs, slow performance, memory leaks or memory fragmentation, and crashes in any user-mode process.

www.microsoft.com

 

이 도구를 실행하면 메모리 덤프를 통해 확인해야 하는 특정 시점을 지정하여 모니터링을 진행하다 자동으로 해당 시점이 되면 메모리 덤프를 생성하도록 설정할 수 있다.

그리고 .Net 관련 메모리 덤프에 대해 자동 분석 기능도 포함하고 있기 때문에 웹 어플리케이션을 실행하다 발생하는 문제인 IIS 서버의 메모리 덤프도 분석이 가능하다. 어떻게 보면 이쪽이 더 주 전문 영역일 수 있겠다.

 

설치후 실행하면 3개의 도구가 보인다.

RuleBuilder - 덤프를 생성하는 조건을 만든다. 특별히 사용할 필요성이 많지는 않다.

Collection - 덤프를 생성하는 조건을 통해 덤프를 생성 모니터링을 진행하도록 한다.

Analysis - 수집한 메모리 덤프를 분석한다.

 

우선 Collection 부터 살펴보면, Rules 과  Process가 있는데, Process는 현재 실행중인 프로세스에서 메모리 덤프를 뜨거나, Memory Leaks을 모니터링 하여 덤프를 생성하도록 설정할 수 있다.

 

그리고 Rules 에서는 아래 Add Rules를 통해 아래와 같이 충돌, 성능, Memory Leak등의 상황에 따른 메모리 덤프 생성 조건에 대한 Rule을 통해 모니터링하여 메모리 덤프를 생성하도록 조건을 만들 수 있다.

 

 

 Crash의 경우 어플리케이션이 알 수 없는 예외 오류로 인해 중지되는 상황을 인식하여 메모리 덤프를 생성하게 된다.

일반적으로 프로그램에서 Exception 상황이라고 생각하면 된다.

본 도구의 가장 강력한 부분은 바로 Performance 부분으로 Performance의 특정 수치나 Http 응답 속도를 조건으로 사용할 수 있어, 성능상 문제가 발생했을 때 메모리 덤프를 수집해 처리중이였던 코드를 살펴볼 수 있다.

 

이렇게 얻은 메모리 덤프를 Analysis를 통해 분석이 가능하다.

Analysis 는 각 상황에 맞는 자동 분석 템플릿을 기본적으로 제공하기 때문에 용도에 맞는 템플릿을 지정하고 메모리 덤프를 선택하여 분석을 진행하면 원인 분석을 보다 쉽게 진행할 수 있다.

 

 

300x250
300x250

댓글0