다음을 통해 공유


힙 데이터 캡처를 사용하도록 설정

프로세스 힙 분석은 HeapAllocHeapRealloc 이벤트를 캡처하여 스택을 수집할 때 가장 효과적입니다. 기호를 사용하여 스택을 디코딩하려면 기호 디코딩을 사용하도록 설정해야 합니다. 프로세스가 시작될 때 또는 기존 프로세스에서 힙 데이터를 캡처할 수 있습니다.

프로세스가 시작될 때 데이터 캡처를 사용하도록 설정하려면

이 예제에서는 데이터 캡처를 시작하는 명령줄 시퀀스에서 분석되는 프로세스를 시작합니다. 프로세스가 시작될 때 데이터 캡처를 사용하도록 설정하면 할당 정보 또는 기록이 손실되지 않습니다. 프로세스 시작 시 데이터 캡처를 사용하도록 설정하려면 다음 단계를 수행합니다.

  1. 관리자 권한 명령 프롬프트에서 다음 명령을 입력합니다. xperf -on Base -BufferSize 1024 -MinBuffers 10 -MaxBuffers 16

  2. 예를 들면 다음 명령과 같습니다. xperf -start HeapSession -heap -PidNewProcess "C:\Program Files\Windows Sidebar\sidebar.exe" -BufferSize 1024 -MinBuffers 128 -MaxBuffers 128 -stackwalk HeapAlloc+HeapRealloc

    사이드바가 바탕 화면에서 열립니다.

    다음 테이블에서는 이러한 명령에 대해 설명합니다.

    명령 설명

    -start HeapSession

    추적 세션 또는 로거 세션을 초기화합니다. 이 경우 세션의 이름은 “HeapSession”입니다.

    -heap

    “HeapSession”을 힙 추적으로 식별합니다.

    -PidNewProcess

    프로세스를 초기화합니다. 이 경우 Windows 사이드바를 초기화합니다.

    -BufferSize

    이벤트 데이터가 저장되는 버퍼의 버퍼 크기를 설정합니다. 버퍼의 최적 크기는 1024KB입니다. 기본값은 64KB입니다.

    -MinBuffers

    이벤트 데이터 스토리지에 대한 최소 버퍼 수를 설정합니다. MinBuffers는 추적 간의 일관성을 보장하기 위해 MaxBuffers와 동일해야 합니다.

    -MaxBuffers

    버퍼는 유한한 시스템 리소스인 비페이징 메모리에서 할당되므로 신중하게 MaxBuffers를 할당합니다.

    -stackwalk

    할당 및 할당 해제 정보를 수집하고 해당 정보를 특정 스레드와 연결하기 위해 stackwalk 기능을 초기화합니다.

    HeapAlloc+HeapRealloc

    stackwalk 기능으로 캡처하고 표시할 특정 힙 이벤트를 식별합니다.

  3. 다음 명령을 입력합니다. xperf -stop -stop HeapSession -d HeapTrace.etl

    -d HeapTrace.etl 명령은 세션에서 생성된 추적을 HeapTrace.etl 파일에 병합합니다.

기존 프로세스에서 데이터 캡처를 사용하도록 설정하려면

이 옵션을 사용하면 프로세스를 중지하고 다시 시작하지 않고도 데이터 캡처를 사용할 수 있습니다. 이는 분석 중인 시나리오가 애플리케이션이 시작된 후에도 발생하지 않고 초기 힙 할당(매우 큰 추적 파일을 생성할 수 있음)이 필요하지 않을 때 유리할 수 있습니다.

다음 단계를 수행합니다.

  1. 관리자 권한 명령 프롬프트에서 다음과 같이 BASE 플래그를 사용하여 NT 커널 로거를 시작합니다. xperf -on BASE

  2. 기존 프로세스에서 힙 추적을 사용하도록 설정하려면 다음 명령에서 XXX를 실제 프로세스 ID로 대체합니다. xperf -start HeapSession -heap -Pid XXX -BufferSize 1024 -MinBuffers 128 -MaxBuffers 128 -stackwalk HeapAlloc+HeapRealloc

  3. 프로세스가 시작될 때 데이터 캡처에 대해 수행한 것과 동일한 방식으로 분석하기 위해 추적을 준비합니다. xperf -stop -stop HeapSession -d heapTrace.etl

heap