류짱:Beyond MySelf

Windows 메모리 덤프 개요와 설정 방법 본문

Microsoft/Windows Platform

Windows 메모리 덤프 개요와 설정 방법

リュちゃん 2010. 6. 10. 18:00

이전에 조금씩 정리하던 메모리 덤프 관련하여 고객의 요청으로 문서를 작성 후 전달하고 포스팅 합니다. KB를 참조 하여 제 개인적으로 보기 좋게 정리를 하였습니다.  다 쓰고 보니 조금 난잡하네요.....-____-;

Windows 메모리 덤프
중지 오류("블루 스크린", 시스템 충돌 또는 버그 확인이라고도 함)가 발생하여 컴퓨터가 예기치 않게 중지되면 세 가지 파일 형식("메모리 덤프" 파일이라고도 함)에 디버깅 정보를 기록하도록 Microsoft Windows Server 2003, Microsoft Windows XP 및 Microsoft Windows 2000을 구성할 수 있습니다.
또한 메모리 덤프 파일에 디버깅 정보를 기록하지 않도록 Windows를 구성할 수도 있습니다. Windows는 다음 세 가지 메모리 덤프 파일 형식 중 하나를 생성할 수 있습니다.

  • 전체 메모리 덤프
  • 커널 메모리 덤프
  • 작은 메모리 덤프(64KB)

전체 메모리 덤프
전체 메모리 덤프는 컴퓨터가 예기치 않게 중지될 때 시스템 메모리의 모든 내용을 기록합니다. 전체 메모리 덤프 옵션을 선택하는 경우 모든 실제 RAM 크기에 1MB를 더한 크기의 페이징 파일이 부팅 볼륨에 있어야 합니다. 기본적으로 전체 메모리 덤프 파일은 %SystemRoot%\Memory.dmp 파일에 기록됩니다.

커널 메모리 덤프
커널 메모리 덤프는 커널 메모리만 기록합니다. 컴퓨터가 예기치 않게 중지될 때 로그에 정보를 기록하는 프로세스의 속도가 향상됩니다. 컴퓨터의 RAM에 따라 서버 부하를 기준으로 사용 가능한 페이징 파일 공간이 150MB에서 2GB까지 필요하고 부팅 볼륨에 페이징 파일 공간으로 사용할 수 있는 크기의 실제 RAM이 있어야 합니다.
이 덤프 파일은 할당되지 않은 메모리나 사용자 모드 프로그램에 할당된 메모리는 포함하지 않습니다. 여기에는 Windows 2000 이상에서 커널과 HAL(하드웨어 추상화 계층)에 할당된 메모리와 커널 모드 드라이버 및 기타 커널 모드 프로그램에 할당된 메모리만 포함됩니다. 대개의 경우 이 덤프 파일이 가장 유용합니다. 이 파일은 전체 메모리 덤프보다 상당히 작지만 문제와 관련이 없는 메모리 부분만 생략됩니다. 기본적으로 커널 메모리 덤프 파일은 %SystemRoot%\Memory.dmp 파일에 기록됩니다.

작은 메모리 덤프
작은 메모리 덤프는 컴퓨터가 예기치 않게 중지된 이유를 확인할 수 있는 최소한의 유용한 정보를 기록합니다. 이 옵션을 사용하려면 부팅 볼륨에 2MB 이상의 페이징 파일이 있어야 하며 Windows 2000 이상에서 컴퓨터가 예기치 않게 중지될 때마다 새 파일을 만들도록 지정합니다. 이러한 파일의 기록은 폴더에 저장됩니다.

이 덤프 파일 유형은 다음 정보를 포함합니다.

  • 중지 메시지와 매개 변수 및 기타 데이터
  • 로드된 드라이버 목록
  • 중지된 프로세서에 대한 프로세서 컨텍스트(PRCB)
  • 중지된 프로세스에 대한 프로세스 정보 및 커널 컨텍스트(EPROCESS)
  • 중지된 스레드에 대한 프로세스 정보 및 커널 컨텍스트(ETHREAD)
  • 중지된 스레드에 대한 커널 모드 호출 스택

이런 유형의 덤프 파일은 공간이 제한되어 있을 때 유용할 수 있습니다. 그러나 포함된 정보가 제한되어 있기 때문에 문제가 발생했을 때 실행 중인 스레드가 직접적인 원인이 아닌 오류는 이 파일을 분석하여 발견할 수 없습니다.
두 번째 문제가 발생하고 두 번째 작은 메모리 덤프 파일이 만들어지는 경우에도 이전 파일은 보존됩니다. 각 추가 파일에는 고유한 이름이 지정됩니다. 데이터가 파일 이름으로 인코딩되어 표시됩니다. 예를 들어, Mini022900-01.dmp는 2000년 2월 29일에 생성된 첫 번째 메모리 덤프입니다. 모든 작은 메모리 덤프 파일 목록은 %SystemRoot%\Minidump 폴더에 저장됩니다.

덤프 유형 구성
시작 및 복구 옵션(덤프 유형 포함)을 구성하려면 다음과 같이 하십시오.
시작
을 누르고 설정을 가리킨 다음 제어판을 누릅니다.

1. 시스템을 두 번 누릅니다.
2. 고급 탭에서 시작 및 복구의 설정을 를 누릅니다.

3. 설정 하고자 하는 덤프 유형을 선택 합니다.


Kernel Memory Dump" is displayed in Startup and Recovery, but a complete memory dump is performed in Windows 2000 or in Windows Server 2003
http://support.microsoft.com/?scid=kb;en-us;885117&x=14&y=14

시작 및 복구를 위한 레지스트리 값
다음 레지스트리 값을 이용하여 시스템에 설정 된 덤프 유형을 확인 할 수 있습니다.
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\CrashControl

CrashDumpEnabled REG_DWORD 0x0 = 없음
CrashDumpEnabled REG_DWORD 0x1 = 전체 메모리 덤프
CrashDumpEnabled REG_DWORD 0x2 = 커널 메모리 덤프
CrashDumpEnabled REG_DWORD 0x3 = 작은 메모리 덤프(64KB)

CrashControl의 추가 레지스트리 값:

0x0 = 사용 안 함
0x1 = 사용
AutoReboot REG_DWORD 0x1
DumpFile REG_EXPAND_SZ %SystemRoot%\Memory.dmp
LogEvent REG_DWORD 0x1
MinidumpDir REG_EXPAND_SZ %SystemRoot%\Minidump
Overwrite REG_DWORD 0x1
SendAlert REG_DWORD 0x1

기본 덤프 유형 옵션
Windows 2000 Professional: 작은 메모리 덤프(64KB)
Windows 2000 Server: 전체 메모리 덤프
Windows 2000 Advanced Server: 전체 메모리 덤프
Windows XP(Professional 및 Home Edition): 작은 메모리 덤프(64KB)
Windows Server 2003(모든 버전): 전체 메모리 덤프

최대 페이징 파일 크기
최대 페이징 파일 크기에 대한 제한은 다음과 같습니다.

 

x86

x64

IA-64

최대 페이징 파일 크기

4GB

16테라바이트

32테라바이트

최대 페이징 파일 수

16

16

16

총 페이징 파일 크기

64GB

256테라바이트

512테라바이트

참고
x86 기반 프로세서에 대해 PAE(실제 주소 확장) 옵션을 사용하도록 설정한 경우 페이징 파일 크기를 최대 16테라바이트로 설정할 수 있지만 설치된 실제 메모리의 1.5배로 설정하는 것이 좋습니다.

Crash 발생시 동작 함수
시스템(CPU or OS)이 어떠한 문제(오류)를 인지하였을 경우 또는 커널을 보호해야 하는 경우는 Windows 운영체제 내의 KeBugCheckEx() 함수가 호출됩니다. KeBugCheckEx()함수는 5가지의 Arguments를 포함합니다.

  • Stop code (또는 bugcheck code)
  • Four stop-code defined parameters

KeBugCheckEx() 함수의 동작은 아래와 같습니다.

  • Turns off interrupts
  • Tells other CPUs to stop
  • Paints the blue screen (BSOD)
  • Notifies registered drivers of the crash
  • If a dump is configured (and it is safe to do so), writes dump to disk

Crash 덤프 생성 순서
- CPU(또는 OS)에 의한 시스템 오류 감지
-
KeBugCheckEx() 함수 실행
-
시스템의 메모리 내용을 Pagefile.sys 로 저장 (BSoD)
   HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\CrashControl 내용에 의해 덤프 종류 결정
-
시스템 재부팅 / Automatically restart 옵션에 의해 결정
-
운영체제 시작 시 savedump.exe 프로세스 구동 / 발생 시간 및 간단한 정보(BugCheck 등)을 Event 등록
-
Memory.dmp 파일 생성 후 pagefile.sys 에 저장된 내용을 해당 파일로 이동
   (기본적으로 %Systemroot% 폴더에 위치함)
-
Logon 시 설정에 따라 Dumprep.exe 추가 수행 / Windows XP 이상의 운영체제에서 가능

Crashes Dump 발생 조건
System 내 여러 동작 중 Designed 된 또는 정형화된 동작을 위반하는 경우, Windows는 Design 상 반드시 Memory Dump를 발생시키게 됩니다. 즉, KEBugcheckEX()함수에 정의된 값으로 내용을 저장하게 됩니다.

하지만 몇몇 Crashed Dump 생성 조건에 부합되지 않는 경우는 Dump 가 발생치 않고, Dirty Shutdown 이 발생할 수 있습니다(Software 적인 처리가 안 되는 경우, 즉 H/W 오동작으로 인해 발생되는 시스템 재부팅은 Dirty Shutdown 으로 분리하지는 않습니다). 아래 내용을 참조합니다.

Memory Dump 가 생성되기 위한 조건
-
Memory.dmp 파일이 이미 존재하고, 제어판의 시스템에서 기존 파일에 덮어쓰기 옵션이 반드시 선택되어 있어야 함.
-
지정된 파티션에 Memory.dmp 파일을 포함하기에 충분한 디스크 여유 공간이 필요
-
C:\ 드라이브, 즉 Active Partition(시스템 파티션=Boot Volume)에 필히 pagefile.sys가 존재해야 함
-
특정 하드웨어(시스템 BIOS 등)에서 직접 오류 처리 기능이 있다면, Disable 해야 함 (예, HP ARS)

BIOS level server hardware recovery mechanism

Some computers have a feature at the BIOS level to do hardware recovery. For example, a computer may have one of the following features:

An Automatic System Recovery (ASR) feature is available on some Hewlett Packard (HP) servers. If ASR exists, disable it. ASR can interrupt the dump process. On an HP server, you can disable ASR by modifying the BIOS settings. If this feature is enabled and if the BIOS does not detect a heartbeat from the operating system, it typically restarts the computer within 10 minutes.

Dell computers have the same feature, and it is called Dell Special Administration Console (SAC) or !SAC.

IBM computers have the same feature, and it is called RSA II (OS) watchdogs.

Fujitsu, NEC, Samsung, Unisys, and other server hardware manufacturers may have a similar feature in their servers.


-
서비스 중 아래 서비스들이 시작 되어 있을 경우 사용 안함 혹은 수동으로 변경
   IBM Automatic Server Restart Service for IPMI
   Hp proliant system shutdown service

- SCSI 컨트롤러와 같이 디스크 IO 관련 문제로 Crash가 발생한 경우 Memory.dmp 생성되지 않을 수 있음
-
전체 메모리 덤프 생성시 \%SYSTEMROOT% 파티션에 있는 유효한 페이지 파일(pagefile.sys)의 크기가 실제 물리적 메모리(RAM) 크기에 약 12 MB를 더한 크기 이상으로 존재해야 함
   A.
8GB의 시스템일 경우 pagefile.sys의 설정 – 8204MB 이상 ((1024 x 8) + 12)
   B.
4GB 이상의 메모리를 가진 시스템은 반드시 Boot.ini 에 PAE 옵션을 추가해야 함 
   C.
Kernel Dump 수집 시 또한 가능한 2GB 이상의 Pagefile.sys 를 유지 권고

또한 H/W 적인 Specific 한 환경하에서는 아래를 반드시 적용 또는 유지해야 하는 경우가 존재합니다.
1. Mass-Storage Controller 드라이버 및 펌 웨어를 가능한 최신 버전으로 유지
(단, 아래 Hotfix 는 Windows Server 2003 SP1 이상에서 적용 가능)

  • SCSIPORT mass-storage controller driver 를 사용한다면, 최신의 SCSIPORT.SYS 유지 (KB934848)
  • STORPORT mass-storage controller driver 를 사용한다면, 최신의 STORPORT.SYS 유지 (KB943295 or later) (예; boot-from-SAN)

2. System BIOS 펌웨어를 가능한 최신 버전으로 유지

3. 시스템 내 Filter 드라이버들(예를 들어, V3 같은 Anti-virus 제품에 포함된)을 최신 버전으로 유지

수동으로 메모리 덤프를 생성 방법(Windows server 2003 기준)

Keyboard or NMI 스위치를 이용한 강제 덤프
http://support.microsoft.com/kb/972110

  • PS/2 키보드를 이용한 메모리 덤프 생성

PS/2 키보드를 사용하는 컴퓨터에서 이 기능을 사용할 수 있도록 설정하려면 다음과 같이 하십시오:

  1. 레지스트리 편집기를 시작합니다.
  2. 다음 레지스트리 하위 키를 찾아 누릅니다:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
    \i8042prt\Parameters
  3. 편집 메뉴에서 값 추가 클릭한 다음 레지스트리 항목을 추가하여:
  4. Name : CrashOnCtrlScroll
  5. Data Type : REG_DWORD

    Value : 1

레지스트리 편집기를 종료합니다.

 
  • USB 키보드를 이요한 메모리 덤프 생성

USB 키보드를 사용하는 컴퓨터에서 기능을 사용하려면 다음과 같이 하십시오.

  1. 레지스트리 편집기를 시작합니다.
  2. 다음 레지스트리 하위 키를 찾아 누릅니다:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
    \kbdhid\Parameters
  3. 편집 메뉴에서 값 추가 클릭한 다음 레지스트리 항목을 추가하여:
  4. Name : CrashOnCtrlScroll
  5. Data Type : REG_DWORD

    Value : 1

레지스트리 편집기를 종료합니다.


Windows feature lets you generate a memory dump file by using the keyboard

http://support.microsoft.com/kb/244139/

 

A hotfix is available to enable CrashOnCtrlScroll support for a USB keyboard on a computer that is running Windows Vista S971284 or Windows Server 2008

http://support.microsoft.com/kb/971284

 


NMI 덤프 파일을 수집할 경우 NMICrashDump 레지스트리 항목을 만들어야 합니다. 이 기능을 사용하려면 다음 단계를 따릅니다:

  1. 레지스트리 편집기를 시작합니다.
  2. 다음 레지스트리 하위 키를 찾아 누릅니다:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
    \CrashControl
  3. 편집 메뉴에서 값 추가 클릭한 다음 레지스트리 항목을 추가하여:
  4. Name : NMICrashDump
  5. Data Type : REG_DWORD

    Value : 1

레지스트리 편집기를 종료합니다.

 

bang.exe를 이용한 덤프 생성


아래의 사이트에서 bang.exe를 다운로드 받습니다.
BANG! -- Crash on Demand Utility

http://www.osronline.com/article.cfm?article=153

다운 받은Bang_v21.zip의 압축을 푼 후 적절한 폴더에 위치 시킵니다.


w2k는 Windows 2000server
wlh는 Windows vista 이상 (Windows server 2008 포함)
wnet는 Windows server 2003
wxp는 Windows xp

현재 OS의 버전과 일치하는 폴더로 이동하여 Bang.exe를 더블 클릭 한 후 실행합니다.


덤프 생성을 위해 Crash Now를 클릭 합니다.

Windows server 2008에서 덤프 생성 방법은 아래의 KB를 참조 하시기 바랍니다.

How to generate a kernel or a complete memory dump file in Windows Server 2008 and Windows Server 2008 R2
http://support.microsoft.com/kb/969028/en-us

[참고 사이트]
Understanding Crash Dump Files

http://blogs.technet.com/b/askperf/archive/2008/01/08/understanding-crash-dump-files.aspx

Overview of memory dump file options for Windows Vista, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows XP, and Windows 2000

http://support.microsoft.com/kb/254649/en-us

충돌 후 Windows NT가 메모리 덤프 파일을 저장하지 않습니다
http://support.microsoft.com/kb/130536


How to generate a kernel dump file or a complete memory dump file in Windows Server 2003
http://support.microsoft.com/kb/972110/en-us

How to generate a kernel or a complete memory dump file in Windows Server 2008 and Windows Server 2008 R2
http://support.microsoft.com/kb/969028/en-us


How to configure system failure and recovery options in Windows
http://support.microsoft.com/kb/307973/en-us



감사합니다.^^