연습 1 - 대규모 작업 집합을 사용하여 프로세스 식별
데이터를 분석하는 데 사용되는 방법론은 조사가 시작된 상황에 따라 달라질 수 있으며 여러 가지 접근 방식을 취할 수 있습니다. 이 연습에서는 다양한 열 정렬을 통해 표시되는 다양한 보기와 함께 몇 가지 방법론의 예를 설명하고 보여 줍니다.
상주 집합이라고 하는 데이터는 현재 RAM(실제 메모리)에 있는 페이지 집합입니다. 상주 집합은 WPR(Windows Performance Recorder) 또는 평가 도구 키트 메모리 평가를 사용하여 추적 캡처의 끝에 있는 현재 메모리 상태의 스냅샷입니다. 단일 추적에서 여러 개의 스냅샷을 수집할 수 없습니다.
상주 집합은 시스템의 메모리 컴퍼지션에 대한 전체적이고 즉각적인 스냅샷을 제공합니다. 상주 집합 분석에 대한 조사는 일반적으로 다음과 같은 이유로 수행됩니다.
특히 실제 메모리 사용량이 예상보다 높은 경우에 실제 메모리 사용량을 알아보기 위해 수행됩니다.
특히 프로세스 프라이빗 작업 집합이 예상보다 큰 경우에 프로세스 프라이빗 작업 집합의 원본을 알아보기 위해 수행됩니다.
페이징 활동으로 인한 시스템 응답성 문제
1단계: 평가 도구 키트를 사용하여 데이터 수집
Windows 평가 도구 키트에는 부팅 후 메모리 공간을 측정하는 테스트가 포함되어 있습니다. 메모리 공간 평가 결과를 사용하여 이미지 소프트웨어 미리 로드의 기준을 수집할 수 있습니다. 많은 프로세스와 서비스가 항상 사용 중이며 메모리를 차지합니다. 이 평가를 사용하면 항상 실행되는 드라이버와 애플리케이션이 부팅 프로세스에 미치는 영향을 확인할 수 있습니다.
시작 메뉴에서 WAC(Windows Assessment Console)를 엽니다.
옵션 메뉴를 열고 새 작업…을 선택합니다.
작업 이름으로 MemoryTest를 입력합니다.
사용자 지정 작업 만들기를 선택합니다.
평가 추가를 클릭합니다.
- “+” 기호를 클릭하여 메모리 공간 평가를 추가합니다.
새로 추가된 메모리 공간 평가를 클릭하여 테스트 구성을 입력합니다.
권장 설정 사용 선택을 취소하고 구성에 대해 빠른 실행을 선택합니다.
- 빠른 실행을 사용하면 데이터 정확도를 희생하여 짧은 시간 안에 테스트를 완료할 수 있습니다.
빠른 실행을 선택할 경우 다음 두 가지 옵션이 있습니다.
모든 테스트 리소스가 포함된 폴더를 만들고 다른 테스트 시스템에 복사하려면 작업을 패키징합니다. (이 옵션을 선택하려면 오른쪽 아래 모서리에 있는 패키지… 단추를 클릭하세요.)
시스템에서 직접 작업을 실행합니다. (이 옵션을 선택하려면 오른쪽 아래 모서리에 있는 실행 단추를 클릭하세요.)
그러면 시스템을 다시 시작하여 추적을 수집합니다.
이 테스트를 완료하는 데 15~20분 정도 걸릴 수 있습니다.
실행 옵션이 필요합니다.
2단계: WAC를 사용하여 메모리 공간 평가 결과 시각화
평가가 완료되면 시스템의 메모리 사용량 요약이 포함된 결과 XML 파일을 열 수 있습니다.
2.1단계: 메모리 보고서 열기
WAC에서 옵션 메뉴를 열고 결과 열기…를 선택합니다.
- 키보드에서 Ctrl+R을 누를 수도 있습니다.
찾아보기… 단추를 클릭합니다.
1단계에서 만든 평가를 저장한 폴더로 이동합니다.
1단계에서 만든 평가를 엽니다.
보고서에는 전체 메모리 공간에서 드라이버와 프로세스가 차지하는 부분을 이해하는 데 도움이 되는 다양한 범주가 포함되어 있습니다.
보고서는 다음과 비슷합니다.
시간을 내어 드라이버 및 프로세스 프라이빗 페이지 범주를 확인하여 보고서를 숙지하세요.
앞의 예에서는 4GB의 실제 RAM에서 1487MB의 메모리가 사용됩니다.
사용 중인 메모리 = 프로세스 작업 집합 + 비페이징 메모리 + 수정된 페이지
사용 가능한 메모리 = 대기 메모리 + 비어 있는 메모리
앞의 예에서 메모리 사용량을 가장 많이 사용하는 것은 비페이징에 267MB, 프로세스 프라이빗 페이지(프라이빗 작업 집합)에 613MB를 사용하는 드라이버 할당입니다.
메트릭에 대한 자세한 내용은 메모리 공간 평가 결과를 참조하세요.
2.2단계: 드라이버 비페이징 할당 검토
이 메트릭은 이러한 할당에서 페이지 아웃할 수 없는 실제 메모리를 사용한다는 점을 제외하고는 페이지 할당과 비슷합니다. 이는 고정된 실제 메모리를 반영하므로 페이징 메모리에 사용할 수 없거나 다른 프로세스 및 서비스에서 사용할 수 없습니다. 비페이징 메모리를 너무 많이 확보하면 백업된 메모리에서 사용할 수 있는 메모리 양이 줄어듭니다.
왼쪽의 화살표를 클릭하여 드라이버 페이징이 아닌 할당 범주를 확장합니다.
DriverLockedSystemPages 범주를 확장합니다.
- 이 페이지는 페이징 메모리에서 로드된 다음, 더 이상 유용하지 않을 때까지 드라이버에서 잠기는 메모리입니다.
메모리 사용량이 가장 큰 드라이버를 식별합니다.
메모리 요구 사항이 더 낮은 하드웨어 또는 소프트웨어 드라이버를 교환하여 이 메트릭에 영향을 줄 수 있습니다.
드라이버 공급업체는 드라이버가 설계된 방식에 따라 이 메트릭에 가장 큰 영향을 줍니다. WAC에 표시된 결과에서 대용량 메모리 할당을 찾습니다. 또한 드라이버 공급업체는 이 평가의 성능 추적(평가 결과와 동일한 디렉터리에 저장되고 WPA로 분석할 수 있음)을 받아서 메모리 사용 감소에 대한 조사 대상이 되는 과도한 메모리 할당 영역을 찾을 수 있습니다.
2.3단계: 프로세스 프라이빗 작업 집합 검토
전체 메모리 공간를 가장 많이 사용하는 것은 사용자가 모르는 사이에 백그라운드에서 항상 실행될 수 있는 앱입니다. 프로세스에서 사용하는 메모리 양을 보려면 보고서에서 프라이빗 페이지 처리 범주를 사용할 수 있습니다.
왼쪽의 화살표를 클릭하여 프로세스 프라이빗 페이지 범주를 확장합니다.
활성 범주를 확장합니다. 이 목록에는 이진 파일과 활성 메모리 사용량이 표시됩니다.
다음과 비슷하게 표시됩니다.
가장 많은 메모리를 사용하는 프로세스를 식별합니다.
"항상 실행" 애플리케이션(Run 레지스트리 키 또는 Startup 폴더의 애플리케이션) 수를 줄여 이 메트릭에 영향을 줄 수 있습니다. 추가된 앱의 영향을 분석합니다.
드라이버 및 소프트웨어 공급업체는 코드가 디자인되는 방식에 따라 이 메트릭에 가장 큰 영향을 줍니다. WAC에 표시된 결과에서 대용량 메모리 할당을 찾습니다. 또한 소프트웨어 공급업체는 이 평가의 성능 추적(평가 결과와 동일한 디렉터리에 저장됨)을 받아서 메모리 사용 감소에 대한 조사 대상이 되는 과도한 메모리 할당 영역을 찾을 수 있습니다. 할당에 대한 주의 깊은 분석은 심지어 작은 할당이라도 개발자가 추가 할당을 찾는 데 도움이 될 수 있습니다.
3단계: WPR을 사용하여 상주 집합 데이터 수집
1단계와 2단계에서는 평가 도구 키트 메모리 공간 평가를 사용하여 메모리 추적을 수집하는 방법을 알아보았습니다. 이 평가는 부팅 시나리오에 대한 추적만 캡처할 수 있습니다. WPR(Windows Performance Recorder)을 사용하여 모든 시나리오(앱 실행, 웹 탐색 등)에 대한 추적을 캡처할 수 있습니다.
다음 단계에 따라 상주 집합 데이터를 사용하여 추적을 수집합니다.
시작 메뉴에서 Windows Performance Recorder를 엽니다.
"첫 번째 수준 심사" 및 "상주 집합 분석" 기록 프로필을 선택하지만 다른 옵션의 기본값은 유지합니다.
시작을 클릭하고 몇 초 정도 기다립니다.
저장을 클릭하고 ETL 추적을 디스크에 저장합니다.
이제 시스템 메모리 컴퍼지션의 스냅샷이 있습니다.
4단계: WPA를 사용하여 상주 집합 데이터 해석
다음 절차를 따릅니다.
시작 메뉴에서 Windows Performance Analyzer를 시작합니다.
방금 수집한 ETL 추적(파일 메뉴, 열기…)을 엽니다.
Graph 탐색기에 설정된 메모리를 확장합니다.
분석 탭에서 상주 집합 그래프를 끌어다 놓습니다.
다음과 비슷하게 표시됩니다.
데이터가 표시되는 방법을 검토합니다. 다음은 최상위 분석을 수행하는 데 가장 유용한 몇 가지 열의 정의입니다.
열 | 정의 |
---|---|
MMList | 페이지가 포함된 메모리 관리 목록입니다.
|
처리 | 페이지의 소유자인 프로세스의 이름입니다. 이 정보는 프로세스 프라이빗 페이지에만 사용할 수 있습니다. 공유되지 않더라도 공유 가능한 모든 페이지는 "Unknown" (-1) 프로세스와 연결됩니다. |
설명 | 표시되는 값은 페이지 범주에 따라 다릅니다. 예를 들면 다음과 같습니다.
|
페이지 범주 | 아래에 정의된 대로 페이지 내에 포함된 데이터 유형입니다. 가능한 범주 중 일부는 다음과 같습니다.
|
크기(MB) | 각 범주에 집계된 페이지의 총 크기입니다. |
6단계: 메모리 공간에 영향을 주는 프로세스 작업 집합 식별
상주 집합 데이터는 요약 테이블의 열 정렬에 따라 여러 가지 방법으로 표시될 수 있습니다. 요약 테이블에는 조사를 위한 시작 지점으로 사용할 수 있는 몇 가지 미리 정의된 열 정렬이 있습니다.
프로세스 프라이빗 작업 집합 미리 설정을 선택합니다.
활성 MMList 그룹을 확장합니다.
현재 메모리 사용량에 영향을 미치는 활성 범주에 집중합니다.
Standby 페이지는 메모리 압력으로 해제될 수 있습니다.
Modified 페이지를 디스크에 쓰고 공간을 해제할 수 있습니다.
크기(MB)열 머리글을 클릭하여 크기를 기준으로 정렬합니다.
사용량이 가장 큰 프로세스를 식별합니다. 프로세스 이름으로 해당 없음 및 “Unknown (-1)”이 표시될 수 있습니다.
N/A에는 드라이버 풀 메모리와 같은 프로세스에 연결되지 않은 페이지가 포함되어 있습니다.
“Unknown (-1)”에는 공유 가능한 페이지가 포함되어 있습니다.
이 프로세스를 확장하여 페이지 범주를 확인합니다.
이제 다음 그림에서 프로세스 작업 집합의 컴퍼지션을 볼 수 있습니다.
상위 범주는 VirtualAlloc 또는 Win32Heap이어야 합니다. 이에 대해서는 연습 2에서 분석합니다.
아래 예에서 SearchIndexer.exe는 힙 할당을 통해 21.7MB의 활성 메모리를 사용하고 VirtualAlloc API 호출을 통해 12.4MB를 사용합니다.
타사 프로세스에 집중하고 미리 로드된 소프트웨어의 일부로 부팅할 때 해당 프로세스를 시작해야 할지 여부를 결정합니다. 개발자는 프로세스에서 만드는 동적 할당을 분석하여 최적화를 수행할 수 있는 위치를 알아보아야 합니다.