Memory.dmp 파일만드는방법및확인방법 작성자 : 이완주 시스템에장애가발생하게되면우리는덤프를분석한다고말을한다. 그러나실제로덤프를분석할능력을가진사람은많지않다. 그러나여기서기본적인덤프생성방법을배우고뒤에실제문제를해결할때사용방법을익힘으로써시스템정보확인차원의덤프분석은가능할거같다. 물론덤프를통해장애를처리하기위해서는많은선수지식이필요하고많은노력이뒤따라야만한다. 다음과같은경우에덤프를사용하여문제를해결할수있다. - 프로세스가응답을중지하는경우 - 프로세스가 CPU 를단일프로세서컴퓨터에서 100%, 이중프로세서컴퓨터에서 50%, 사중 CPU 컴퓨터에서 25% 사용할경우 - 프로세스가예기자않게충돌하거나종료될경우 메모리덤프를만드는여러가지방법 덤프를만들게되면저장되는기본위치는 %SystemRoot% 위치이며위치는바꿀수있다. 마우스오른쪽단추로내컴퓨터를누른다음속성 (Windows 2000 의경우, 등록정보 ) 고급탭을누른다음시작및복구에서디버깅정보쓰기를누른다음전체메모리덤프, 커널메모리덤프또는작은메모리덤프중에서선택.
디버깅정보쓰기에서시스템이예상치않게멈출경우 Windows 에서기록할정보유형을 선택합니다. 작은메모리덤프 (64KB) 문제를확인할수있도록돕는가장작은양의정보를기록합니다. 이옵션을사용하려면컴퓨터의부팅볼륨에 2MB 이상의페이징파일이있어야합니다. 이옵션을선택하면 Windows 는시스템이예상치않게멈출때마다 64KB 크기의새로운파일을만듭니다. 이러한파일에대한기록은작은덤프디렉토리아래에나열된디렉터리에저장됩니다. 커널메모리덤프커널메모리만기록하므로작은메모리덤프보다더많은정보를저장하지만시스템이예상치않게멈출때전체메모리를덤프하는것보다짧은시간내에작업을완료할수있습니다. 파일은덤프파일아래에나열된디렉터리에저장됩니다. 이옵션을선택하는경우부팅볼륨에충분한크기의페이징파일이있어야합니다. 필요한크기는컴퓨터의 RAM 크기에따라다릅니다. 커널메모리덤프의경우사용할수있는최대공간크기는 2,060MB 입니다. 다음표는페이징파일크기에대한지침을제공합니다. RAM 크기 페이징파일최소크기 256MB-1,373MB RAM 크기의 1.5 배 1,374MB 이상 2,060MB( 커널메모리덤프의최대데이터양 ) 전체메모리덤프 RAM 크기가 2GB 이상인컴퓨터에서는사용할수없습니다. 시스템이예상치않게멈출때시스템메모리의전체내용을기록합니다. 이옵션을선택하는경우실제 RAM 에 1MB 를더한크기를모두보관하기에충분한페이징파일이부팅볼륨에있어야합니다. 파일은덤프파일아래에나열된디렉터리에저장됩니다.
Windbg 가장많이사용되는 GUI 도구이며 User Mode, Kernel Mode Debug 등이가능하다. http://www.microsoft.com/ddk 해당사이트에서 Debug Tool 다운로드함 해당사이트에서 OS 의 Version 에맞게다운받으면됨. 최신버전확인해서받으면됨. 다운받고설치하면아래의위치에 C:\Program Files\Debugging Tools for Windows 설치가됨
Windbg 에가장중요한것은 Symbol 을설정하여야한다. http://support.microsoft.com/default.aspx?scid=kb;ko;315263 File -> Symbol File Path 에서아래와같이지정해야한다. Symbol 을저장해놓은서버를 Symbol Store 라고함 Symbol Server 라고하지않음 Private Symbol Store ( 마이크로소프트내부직원용 ) \\symbols\symbols 가있으며해당소스코드및소스코드의몇번째라인인지도나타남 Public 에는나타나지않는정보가나타나게됨. Public Symbol Store ( 일반인이접할수있는심볼 ) http://msdl.microsoft.com/download/symbols srv* 을 Symbol Server 라고하며해당위치로변경하여해당 Symbol 을 Download 하게함 srv* 로컬캐쉬위치주소 * 심볼스토어위치 예 ) srv*c:\localsymbols*http://msdl.microsoft.com/download/symbols 위에서 c:\symbolcache local cache 위치 ( 임의의값을설정한것임 ) 즉 Symbol store 를지정할경우는반드시앞에 srv* 를붙여야한다. 물론로컬일경우는생략가능캐쉬를하지않으면매번해당서버에서다운받기때문에속도가느릴수있다. 이것도재산이므로캐쉬를두는것이좋다. 예 c:\localsymbol 이라면 srv* 생략가능
C:\Program Files\Debugging Tools for Windows\symsrv.dll 이 Dll 이 srv* 역할을하는 Symbol Server 라고함 Symbol Server 가 Symbol Store 에가서 Symbol 을가져오는역할을하게됨 Symbol 은상당히중요한역할을하는것이므로반드시알아두어야함. 심볼을설정하였다면로컬컴퓨터의특정프로세스의예를들어 Notepad.exe 와같이로컬 컴퓨터의실행되고있는프로세스의값을확인할수있다. 이방법은굳이덤프를만들지않고지금실행하고있는프로세스의값을확인하고자할 때유용하게사용할수있다.
Windbg 도구에서현재실행하고있는프로그램의정보를확인하고싶다면.. File -> Attach to Process 에서살펴보면된다. 위의화면은실제 Notepad.exe 파일을실행한결과를 Windbg 로실행한결과이다. Windbg 는그밖에도기존에덤프파일을불러와분석할때도유용하게사용되는도구이다. Windbg 를설치하게되면 C:\Program Files\Debugging Tools for Windows 에는아래의도구는명령어기반의도구들이설치되며명령어기반으로관리할때사용되는도구들이다. Command Tool kd.exe : Kernel Mode Debug cdb.exe : User Mode Debug ntst.exe : User Mode Debug
Userdump.exe http://support.microsoft.com/default.aspx?scid=kb;ko;241215 UserDump 및해당설명서는 OEM Support Tools 패키지의일부이며. 다음웹사이트에서복사본을구할수있음. http://download.microsoft.com/download/win2000srv/utility/3.0/nt45/en-us/oem3sr2.zip Userdump.exe 도구를사용하면예외오류와함께종료되거나더이상응답하지않는 프로세스의사용자덤프를생성할수있습니다. 일반적으로 LSASS.EXE 의과도한사용으로인한문제가발생하는경우 LSASS.EXE 는인증과관련된문제들예를들어특정시간에도메인인증이집중되거나아니면 2 대의 DC 가 NLB 역할을제대로하지못하는경우등에이러한현상이발생할수있으며이러한현상이나오는경우정확한분석을위해 Userdump.exe 명령어를실행하여메모리덤프를통해분석할수있게된다.
Adplus ADPlus 는콘솔기반의 Microsoft Visual Basic 스크립트로, Microsoft CDB 디버거를 자동화하여하나이상의프로세스디버그출력을포함하는메모리덤프와로그파일을생성 IIS 와관련된문제등의경우에많이이용되는툴이다. ADPlus 는프로세스나응용프로그램이응답을중지하거나예기치않게종료되었을때문제를해결할수있도록 Microsoft 고객기술지원부 (PSS) 에서제공하는도구입니다. ADPlus(ADPlus.vbs) 는 Microsoft Internet Information Server(IIS) Exception Monitor(6.1/7.1) 와사용자모드프로세스덤프 (User Mode Process Dump) 를대체할수있는도구로자주사용됩니다. 이러한두도구는 Microsoft Windows DNA 환경에서프로세스가응답을중지하거나예기치않게종료되는이유를찾기위해 PSS 에서자주사용하는개별도구입니다. Microsoft Debugging Tools for Windows 에포함되어있음. C:\Program Files\Debugging Tools for Windows\adplus. 퓬 http://support.microsoft.com/default.aspx?scid=kb;ko;286350 명령어에대한자세한사용방법은위의사이트참조
키보드를이용한강제로메모리덤프만들기 http://support.microsoft.com/?id=244139 키보드스페이스바오른쪽에있는 Ctrl 키와함께 Scroll Lock 를두번누르게되면키보드에러로인식시켜강제로덤프를만드는방법으로강제덤프생성하는방법이다. 단아래의단계는 USB 키보드를사용하는컴퓨터와같은레거시가없는컴퓨터에서는작동하지않는다. 이러한컴퓨터의경우디버거를연결해서직접모니터링을하여야한다. 아래의사항은레지스트리를변경하는방법이다. 레지스터편집기를실행한다. (regedt32.exe 혹은 regedit.exe) 2. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters 키를찾는다. 편집 -> 새로만들기 -> DWORD CrashOnCtrlScroll 값 1 을추가한다.
강제메모리덤프를생성하기위해서는레지스트리키를바꾸고컴퓨터를리부팅하여야 만한다. 리부팅후 Ctrl 키를누른상태에서 Scroll Lock 를두번누르면아래와같이화면이 바뀌면서 Memory.dmp 파일을만들게된다. 로그온후키보드관련시스템장애가발생했다고알려주는이벤트메시지가나타나게된다.
Kernel Debug 을통해 Local Debug 방법 File -> Kernel Debug COM, 1394 2 개는원격에서시리얼로접근하여처리할경우사용 여기서는 Local 을선택 로컬은실제 debug 는할수없고정보만확인할수있음 Windows XP 이상에서만이도구를통해서로컬사용가능 Windows 2000 이라면 livekd tool 을이용하여정보를확인할수있음 (livekd 는 http://www.sysinternals.com 에서다운가능 ) 단로컬인경우는시스템상태만확인할수있음.
Kernel Mode 를모니터링하고자한다면 두대의컴퓨터가필요하다대체로노트북을이용하여모니터링을하게된다. 이경우는문제가된컴퓨터를 Target Machine 라고하고문제를해결하고자하는컴퓨터를 Host machine 라고한다. 두대의컴퓨터에는 Null Modem Cable 로연결하거나 1394 로연결할수있다. Target Machine 은 Boot.ini 를통해부팅설정을하여야한다. [boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\windows [operating systems] multi(0)disk(0)rdisk(0)partition(1)\windows="windows Server 2003, Enterprise" /fastdetect multi(0)disk(0)rdisk(0)partition(1)\windows="windows Server 2003, Enterprise" /fastdetect /debug port=com1 /baudrate=115200 위와같이 Boot.ini 를설정하여야만한다. 일반적으로전송속도는 115200 을많이이용한다. 설정이끝나면 Target Machine 은컴퓨터부팅을다시하여위에설정된값으로부팅을 하면 Host Machine( 노트북 ) 에서는 windbg 를실행하고있어서정보를받아내게되고 문제를해결할수있다.