Maystyle :
Admin : New post
Guestbook
Local
media
Catergories
Recent Articles
Recent Comments
Recent Trackbacks
Calendar
Tag
Archive
Link
Search
 
  메모리 풀 모니터(Poolmon.exe)를 사용하여 커널 모드 메모리 누수 문제를 해결하는 방법 
작성일시 : 2007. 11. 27. 09:39 | 분류 : Windows Server/Kernel

pooled 메모리란 Windows 커널에서 사용하는 Nonpaged pool 및 Paged pool을 말합니다. 종종 장치 드라이버로 인한 메모리 누수 (Memory Leak) 또는 Windows 의 커널 및 각종 DLL 로 인한 메모리 누수가 있을 수 있으며, 본 자료에서는 poolmon을 이용하여 이를 확인 할 수있는 방법을 설명 합니다.

- 추가 : 커널 메모리 덤프 및 프로세스 모니터로도 확인이 가능함

먼저 커널 메모리를 확인 하기 위해서는 누가 해당 pooled 메모리를 사용하는지 테깅이 우선되야 합니다. 다음의 두가지 방법을 이용하여 풀 테깅을 하시면 됩니다.

- 추가 : Windows 2003 부터는 풀 테킹이 Default 입니다.

[테그 모드 설정]

방법 1: 레지스트리 편집

경고: 레지스트리 편집기를 잘못 사용하면 심각한 문제가 발생할 수 있으며 문제를 해결하기 위해 운영 체제를 다시 설치해야 할 수도 있습니다. Microsoft는 레지스트리 편집기를 잘못 사용함으로써 발생하는 문제에 대해 해결을 보증하지 않습니다. 레지스트리 편집기의 사용에 따른 모든 책임은 사용자에게 있습니다.
Poolmon.exe의 태그 모드를 설정하는 레지스트리 값을 변경하려면 다음과 같이 하십시오.

1. 레지스트리 편집기를 실행합니다.

2. 다음 레지스트리 키를 찾습니다.

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager

3. GlobalFlag의 값을 적어 두거나 Session Manager 키를 저장합니다.

4. 오른쪽 창에 있는 GlobalFlag 값을 두 번 누릅니다.

5. 값을 16진수 0x00000400으로 변경합니다.
참고 글로벌 플래그 값 0x00000400을 추가하는 경우 값이 추가된 후에는 0x400만 표시됩니다. 선행 0을 모두 추가해야 합니다. 그렇지 않으면 일부 Poolmon 정보가 출력 화면에 표시되지 않습니다.

6. 컴퓨터를 다시 시작합니다.

참고 디버깅이 완료되었으면 GlobalFlag 값을 3단계에서 적어 둔 원래 값으로 다시 변경합니다.

방법 2: Gflags.exe 유틸리티 사용

글로벌 플래그 편집기(Gflags.exe) 유틸리티를 사용하여 풀 태그 기능을 설정할 수도 있습니다. Gflags.exe는 Windows NT 4.0 Resource Kit 및 Windows 2000, Windows XP, Windows Server 2003 CD-ROM의 \Support\Tools 폴더에서 사용할 수 있습니다.
참고 Windows Server 2003에서는 풀 태그 기능이 영구적으로 설정되어 있기 때문에 Global Flags 대화 상자의 Enable Pool Tagging 확인란이 흐리게 나타나며 풀 태그 기능을 설정하거나 해제하는 명령이 실패합니다.
Gflags.exe를 사용하여 변경하려면 다음 단계를 수행하십시오.

1. 시작, 실행을 차례로 누르고 gflags.exe를 입력한 다음 확인을 누릅니다.

2. Enable Pool Tagging을 선택합니다.

3. Apply를 누른 다음 OK를 누릅니다.

4. 컴퓨터를 다시 시작합니다.

참고 디버깅이 완료되면 위의 단계를 반복하여 풀 태그 기능을 해제하십시오.

[Poolmon을 사용하여 정보 수집]

PoolMon은 명령 창 내에 풀 태그 정보를 표시합니다. 도구에서 반환된 모든 태그 정보를 표시하려면 화살표 키나 PAGE UP 및 PAGE DOWN 키를 사용하십시오.
Poolmon.exe는 Windows NT 4.0 Resource Kit 및 Windows 2000, Windows XP, Windows Server 2003 CD-ROM의 \Support\Tools 폴더에서 사용할 수 있습니다.
다음 단계를 사용하여 태그 정보를 복사하고 저장합니다. 15분 간격으로 2시간 동안 이 단계를 반복합니다. ㅔ각 업데이트를 메모장 파일 끝에 추가합니다.

1. 시작을 누르고 설정을 가리키고 제어판을 누른 다음 콘솔을 두 번 누릅니다.
참고 Windows 2000의 경우 다음 단계를 수행해야 합니다.

a. 시작, 실행을 차례로 누르고 cmd를 입력한 다음 확인을 누릅니다.
b. 제목 표시줄을 마우스 오른쪽 단추로 누른 다음 등록 정보를 누릅니다.

2. 옵션 탭을 누르고 빠른 편집 모드를 누른 다음 삽입 모드를 누릅니다.

3. 레이아웃 탭을 누르고 화면 버퍼 크기 값을 99로 변경한 다음 확인을 누릅니다.

4. 시작을 누르고 프로그램을 가리킨 다음 명령 프롬프트를 누릅니다.

5. Windows NT 4.0 CD의 Support\Debug\platform 폴더에서 Poolmon.exe를 찾습니다. Poolmon.exe가 있는 드라이브와 폴더로 변경합니다. Windows 2000 CD에서는 Poolmon.exe가 Support.CAB 파일에 있습니다. Support.CAB은 \Support\Tools 폴더 아래 있습니다.

6. Poolmon.exe를 입력합니다.

7. Poolmon에 두 번째 열 "type"이 표시되고 값 paged가 표시될 때까지 P 키를 누릅니다. (한번은 Paged 다음에 한번 더 누르면 혼합 다시 누르면 Nonpaged로 정렬 됩니다.)

8. B 키를 눌러 열을 높은 값에서 낮은 값으로 정렬합니다.

9. 전체 화면 내용을 선택한 다음 Enter 키를 누릅니다.

10. 시작을 누르고 프로그램, 보조프로그램을 가리킨 다음 메모장을 누릅니다.

11. 편집 메뉴에서 붙여넣기를 누릅니다.

12. 7단계를 반복하여 값 nonpaged를 찾습니다.

13. 8단계 - 11단계를 반복하여 붙여넣습니다.

Poolmon.exe에는 출력을 정렬하는 몇 가지 명령 키도 있습니다. 아래에서 설명하는 문자를 눌러 작업을 수행합니다. 각 명령이 작동하는 데 몇 초 정도 걸립니다. 다음은 몇 가지 명령 목록입니다.

P - 태그 목록을 페이징, 비페이징 또는 혼합 순으로 정렬합니다. P 키를 누르면 각 옵션이 순환됩니다.
B - 최대 바이트 사용 순으로 태그를 정렬합니다.
M - 최대 바이트 할당 순으로 태그를 정렬합니다.
T - 영문 태그 이름 순으로 태그를 정렬합니다.
E - 페이징, 비페이징 합계를 맨 아래에 표시합니다. 순환합니다.
A - 할당 크기 순으로 태그를 정렬합니다.
F - "frees" 순으로 태그를 정렬합니다.
S - allocs와 frees의 차이 순으로 태그를 정렬합니다.
E - 페이징, 비페이징 합계를 맨 아래에 표시합니다. 순환합니다.
Q - 종료합니다.

출처 : http://support.microsoft.com/kb/177415/en

|