본문 바로가기
프로그래밍/윈도우

[윈도우]성능 분석기를 통한 프로세스 메모리 사용량 추적

by 소나기_레드 2023. 3. 5.
반응형

개발한 프로세스에서 메모리 누수(Leak)이 발생된다 예상되면, 메모리 사용량 추적을 통해 메모리 누수 여부를 검증해야 합니다. 성능 모니터를 이용하면 프로세스의 메모리 사용량을 추적 및 로그 기록할 수 있습니다.

 

만약, 메모리 누수가 확인된다면, 테스트용 실행파일 등으로, 메모리 누수가 발생할 수 있는 코드의 범위를 줄여가며 반복적으로 테스트 해야 합니다.

만약, 특정 기능 수행 시 메모리 누수가 의심된다면 특정 기능을 반복적으로 실행할 수 있는 테스트 프로그램을 만들어 점검할 코드의 범위를 줄여가며 추적하기 바랍니다.

 

델파이로 개발된 프로젝트라면 메모리 누수 보고 기능을 켜서 메모리 누수 여부를 확인할 수 있습니다.

 

프로세스 메모리 사용량 추적

윈도우즈 성능 모니터를 이용해 프로세스가 사용 중인 메모리 사용량을 로그파일로 기록하는 방법을 소개합니다.

 

모니터링 대상 프로세스 실행

메모리 사용량 추적할 프로세스를 실행합니다. 저는 MemoryLeakTest.exe라는 실행파일을 만들어 실행했습니다.

 

성능 모니터에서 프로세스 메모리 사용량 기록

성능 모니터를 실행하고, 성능 > 데이터 수집기 집합 > 사용자 정의 메뉴를 선택합니다.

 

목록 창에서 우측 마우스를 누르고, 새로 만들기 > 데이터 수집기 집합 메뉴를 선택합니다.

 

이름을 지정하고, 수동으로 만들기(고급) 항목 선택 합니다.

 

성능 카운터 항목을 선택합니다.

 

[추가] 버튼을 누릅니다.

데이터 수집 가격을 지정합니다.

 

사용 가능한 카운터에서 Process 항목을 펼치고, Working Set 항목을 선택합니다.

인스턴스로는 추적할 프로세스를 선택합니다.(현재 실행된 프로세스 목록이 표시됩니다.)

[추가] 버튼을 눌러 추가합니다.

(Handle Count, Private Bytes 등 추적하고 싶은 카운터들도 함께 선택해도 됩니다.)

(주요 카운터에 대한 설명은 하단 참고링크 참고)

 

데이터 저장 경로를 지정합니다.

 

 

작업을 마칩니다.

 

추가한 데이터 수집기 집합의 속성에 들어가 로그 형식을 "쉼표로 구분"으로 변경합니다.(로그를 엑셀로 활용할 수 있습니다.)

 

성능 모니터링을 시작합니다.(데이터 수집기 집합의 속성에서 예약등을 이용해 자동 시작할 수 있습니다.)

 

로그파일 확인

지정한 경로에 csv 파일이 생성됩니다.

 

csv 파일을 엑셀로 열고, 데이터를 분석하거나, 차트를 만들어 시각적으로 메모리 사용량(Working Set) 추이를 관찰 할 수 있습니다.

 

참고링크


출처 : https://blog.hjf.pe.kr/466

 

 

<참고> 주요 카운터
성능 모니터를 사용하여 추적할 두 가지 주요 개체는 Process와 Memory입니다. 자주 추적하게 될 속성에는 다음과 같은 것들이 포함됩니다.
Memory: Available Bytes-이 카운터는 실행 중인 프로세스의 작업 설정과 캐시에서 필요로 하는 정보를 취한 다음 남아 있는 실제 메모리의 크기를 추적합니다. [Memory: Available Bytes]가 시스템에 정의된 최소 수준 이하이고 [Memory: Pages/sec] 값이 계속 최고치에 이르면 메모리를 추가해야 합니다.
Memory: Page faults/sec-프로그램에서 작업 설정의 일부인 메모리를 사용하려고 하지만 찾을 수 없는 경우 페이지 오류가 발생합니다. 페이지 오류의 종류에는 하드와 소프트 두 가지가 있습니다. 하드 페이지 오류는 필요한 페이지를 하드 디스크에서 로드해야 하는 경우에 발생합니다. 소프트 페이지 오류는 프로그램이 메모리의 지정된 위치에 있지 않은 경우에 발생합니다.
Memory: Page Reads/sec-이 카운터는 컴퓨터가 페이지를 위해 가상 메모리를 찾아야 하는 횟수를 추적합니다. 이 때 페이지 수는 세지 않고 액세스 횟수만 계산합니다.
Memory: Pages Input/sec-이 카운터를 사용하여 가상 메모리에서 로드해야 하는 메모리 페이지 수를 추적할 수 있습니다.
Memory: Pages Output/sec-이 카운터를 사용하여 하드 디스크에서 가상 메모리로 스와핑되고 있는 메모리 페이지 수를 알 수 있습니다.
Memory: Pages/sec-[Pages/sec]는 RAM에서 사용할 수 없는 응용 프로그램과 RAM에 다른 페이지 공간을 만들기 위해 하드 디스크에서 읽거나 기록해야 하는 응용 프로그램을 실행하기 위해 요청된 메모리의 페이지 수를 가리킵니다. 시스템에 하드 페이지 오류가 자주 발생하는 경우 [Memory: Pages/sec] 값이 높아집니다.
Process: Private Bytes-[Private Bytes]는 모니터링 중인 프로세스에 독점적으로 할당된 메모리를 가리킵니다.
Process: Working Set-[Working Set]은 선택한 프로세스에 할당된 규정 메모리의 크기를 가리킵니다. 사용 가능한 RAM 크기가 작은 경우 시스템을 실행하면 프로세스 작업 설정 즉, 프로세스에 할당된 메모리의 크기가 잘려 페이징이 발생합니다.
메모리를 많이 사용하는 컴퓨터에서는 가상 메모리 카운터의 값이 증가하여 높은 수준에 머물게 됩니다. 이 값은 모두 시스템에 메모리가 부족하다는 것을 나타냅니다. 시스템 속도가 느린데도 메모리 병목 현상이 카운터에 표시되지 않으면 다른 문제가 있을 수도 있습니다.

 

참고 링크

http://tshooter.tistory.com/93
http://www.nextstep.co.kr/121
http://egloos.zum.com/light99/v/4983555

반응형

댓글