윈도우 7 메모리 덤프 생성 과정 변경
안녕하세요? Sankim입니다, 오늘은 제목이 좀 건조 합니다.
이번 포스팅에서는 Windows 7에서 변경된 메모리 덤프(Memory dump) 생성 프로세스에 대해서 말씀 드릴까 합니다. 다 읽으시고 나서는 Windows 7을 기점으로 지금까지 생각지도 못한 세밀한 부분들까지 새로운 PC환경을 위해 능동적으로 변화하고 있다고 느끼(?) 실지도 모르겠습니다.
[블루스크린] 블루스크린이 왜 파란색인지 궁금하시면 여기를 클릭하세요.
Windows 사용자라면 애석하게도 블루스크린을 한번씩 경험해 보셨을 거라 믿습니다. 블루 스크린이란 윈도우의 커널 모드에서 문제(Crash)가 발생하면 화면상에 Crash가 발생했음을 알리는 블루스크린을 띄우면서 시스템 드라이브(보통 C 드라이브 루트 폴더)에 있는 페이지파일(pagefile.sys) 파일에 메모리 내용을 쓰게 됩니다, 그 뒤에 부팅하면서 덤프가 저장된 이전 pagefile.sys로 C:\Windows 폴더에 메모리 덤프 파일인 memory.dmp를 생성합니다. Dump(덤프)라는 의미가 어떤 매체의 데이타를 다른 종류의 매체로 옮긴다는 의미를 가지고 있는데, 블루스크린이 발생하면 숫자가 1%에서 100%까지 옮겨 가는 것을 볼 수 있죠? 이것이 바로 메모리에 있는 데이터를 하드디스크에 있는 Pagefile.sys에 옮기는 과정을 나타내는 것 입니다.
[메모리에서 Memory.dmp로 가는 과정]
윈도우에서 어떤 작업을 하기 위해서는 실행 데이터가 메모리에 올라와 있어야 하는데 이 때문에 memory.dmp에는 당시 윈도우가 문제 시점에 어떤 일들이 벌어 지고 있는지를 확인할 수 있는 아주 중요한 단서를 가지고 있습니다. 그래서 이 memory.dmp 파일을 분석하여 문제(Crash)가 발생한 원인을 찾아 해결 합니다.
[WinDBG를 이용해 디버깅 중(?)..]
덤프에는 메모리에 있던 모든 내용을 모두 dump하는 전체덤프(Complete dump), 메모리에서 커널(Kernel) 관련 내용만 dump하는 커널덤프(Kernel dump)가 있고 덤프에 대한 간략한 정보만을 담은 작은 메모리 덤프(Mini dump)가 있습니다. 만약 메모리가 2GB를 넘어가면 아래 그림에서처럼 전체덤프 옵션을 사라지고 커널덤프와 미니덤프만 남습니다, 그러나 사용자가 필요하다면 레지스트리 변경으로 전체덤프 생성이 가능합니다. 시스템 Crash(블루스크린이 나타난 경우 보통 이렇게 부릅니다)이 발생한 경우 대부분 커널덤프로 분석하지만(당연히 Kernel에서 문제니까) 경우에 따라서 Application Mode가 커널모드(Kernel Mode)에 영향을 주어 시스템 Crash를 야기하는 경우가 있어 드물지만 전체 덤프가 필요한 경우가 있습니다. 몇 년 전만해도 대용량의 전체덤프가 필요할 때 때 이것을 어떻게 받아내서(마치 산고를 거쳐 한 생명을 받아내듯이..) 그걸 어떻게 원격에 가져가 분석할지에 대해서 고민한적이 있었는데요.. **요즘이야 워낙 하드디스크가 커져서리..
[디버깅 정보 쓰기] ‘덤프 유형 확인은 제어판 > 시스템 > 고급 시스템 설정 > 시작 및 복구’에서 확인 가능합니다.
덤프의 유형이 ‘전체 덤프’로 설정 되어 있으면 ‘실제 페이지 파일(Pagefile.sys) 크기 + 300MB’의 크기의 memory.dmp 파일이 생성 되는데. 요즘 대부분의 PC나 노트북의 경우 2GB 정도의 메모리가 기본으로 장착 되어 있기 때문에 2GB의 메모리가 있다면 2.3GB 정도의 memory.dmp 파일이 생성 됩니다, 혹은 커널 덤프라고 해도 수백 메가바이트가 되기도 합니다. 아무리 요즘 하드디스크가 대용량화 되었다고 해도 이런 크기는 무시 못할 것입니다, 게다가 넷북과 같은 경우 PC만큼 넉넉한(?) 용량을 가지고 있지 못하기 때문에 큰 부담이 될 수 있습니다. 이에 Windows 7에서부터는 하드디스크에서 부담을 줄이고자 메모리 전체 덤프와 커널덤프 파일 생성 여부를 아래와 같이 변경 하였습니다.
[메모리 덤프 생성 여부 순서도]
*Update, 종전에 “4GB이하”라는 항목에서 “25GB”라고 그림이 바뀌어있습니다. 4GB제한일 때는 Windows 7 Beta 시절이고 현재 RTM의 경우는 25GB가 맞습니다. 이를 콕집어 확인해주신 talee군에게 감사 드립니다.
결론부터 말씀 드리면 위 순서도의 결론은 25GB 이상의 여유 공간이 존재 하지 않는 한 메모리 덤프를 생성하지 않는다는 것입니다. 이것은 하드디스크의 공간이 충분하지 않은 상태에 Memory.dmp 파일이 생성되어 시스템 리소스를 차지 하는 것을 막겠다는 의도 입니다. 위 표를 정리 해보죠.
① 먼저 레지스트리 AlwaysKeepMemorydump값이 1로 되어 있으면 무조건 메모리 덤프 파일을 생성합니다. 아래 덤프를 만들기 위한 조건에 관계하지 않고 무조건 메모리 덤프를 생성 합니다. 경로는 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl 입니다, 기본적으로는 없는 값이므로 필요하면 만드셔야 합니다.
② 만약 Windows가 Windows Server 2008 R2 이상이면 무조건 메모리 덤프 파일을 생성합니다. 기업에서 서버로 사용하는 제품에 문제가 생겼는데 덤프 분석이 필요할 가능성이 높겠죠? 그래서 더 볼 것 없이 W2K8 R2에서는 무조건 덤프를 생성 합니다. 이전에 말씀 드렸듯이 Windows 7과 Windows Server 2008 R2는 동일한 커널을 가지고 있으며 이번에 새로 적용된 룰은 이 둘에게만 해당 됩니다.
③ 만약 Windows 7 이상 클라이언트가 도메인에 Join 되어 있다면 무조건 메모리 덤프 파일을 생성한다. 도메인에 Join되어 있다는 의미는 기업 고객일 가능성이 높고, 고객 기업이라면 덤프 발생시 클라이언트라도 덤프 분석이 필요한 가능성이 높기 때문입니다.
④ 도메인에 조인 되어 있지 않다면 하드디스크의 여유 공간이25GB 이상인지 확인 한다, 만약 25GB 이상이면 메모리 덤프 파일을 생성 하지만, 그렇지 않다면 생성하지 않습니다.
자~ 그럼 전체덤프와 커널덤프 말고 미니덤프(Minidump)는 어떨까요? 이전에는 시스템 Crash가발생할 때마다 Minidump폴더(보통 C:\Windows\Minidump)에 MiniMMDDYY-nn.dmp 파일(MMDDYY는 월/일/연도) 이름 형식으로 미니덤프가 쌓였었습니다, 미니덤프와 다른 덤프의 차이점은 크기가 작다는 점 이외에 다른 전체/커널덤프들은 만약 덤프가 발생하면 이전에 있던 memory.dmp위에 덮어 씁므로써(Overwrite) 복수의 덤프 파일이 생성되지 않지만 미니 덤프파일의 경우 계속해서 발생일 표시인 MMDDYY과 뒤에 nn의 이름을 바꿔가며 생성됩니다. 그래서 Windows 7에서 부터는 레지스트리 MinidumpsCount 값으로 최대로 만들어 질 수 있는 미니덤프 값을 조정 할 수 게 되었습니다. MinidumpsCount는 레지스트리 경로 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl에서 볼 수 있으며 기본 50개로 설정 되어 있습니다.
Windows 7에서는 지금까지 말씀 드린 덤프 파일과 같이 디스크 크기(Disk Footprint)를 줄이기 위한 노력 이외에도 정말 여러 방면에서 OS를 가볍게 해서 빠른 Performance를 내기 위한 눈물겨운(?) 노력을 기울였는데요, 앞으로 계속해서 소개하도록 하겠습니다.
** 생각해 보니 HDD는 커졌지만 메모리도 너무 많이 커져서.. 램이 512GB인데 이걸 전체 덤프로 받으려면..
Comments
Anonymous
January 01, 2003
위 댓글에 "Open' 아이콘 깨지는거에 대해서", "아이콘이 깨집니다"라고 표현하셔서 깨지는 걸로 잘못 알고 계시다고 생각했습니다, 아마 "깨진것 처럼 보이는 윈도우 창 아이콘"이란 표현을 해주셨으면 오해(?)가 없었을듯 하네요, 문자로 Communication은 오해(?)를 낳기 마련이죠. ^^ 좋은 의견 이십니다, 그렇담 그 아이콘.. Exe를 실행(Run)하는 것이니 달리는 아이콘으로? :) 감사합니다.Anonymous
January 01, 2003
어디가 틀리셨다는 건가요? 하나로 해도 전혀 문제가 없다는 부분이 어디를 말씀하시는지...^^;; 방문감사합니다. :)Anonymous
January 01, 2003
ㅎㅎㅎ 깨졌다고 하시길래 다른 모양(?)을 생각했는데 혹시 윈도우 안에 빨간점 파란동그라미가 있는 아이콘을 말씀하시나요? 그렇다면 그 아이콘은 깨진것이 아니고 exe 실행자 아이콘이 원래 그것입니다. 확장자를 클릭하면 관련 실행자 아이콘이 나타나는데 exe는 범용이므로 특별히 연결할 아이콘이 없이 범용(?)성 아이콘을 가져 놓아서 그렇습니다. 예를 들어 *.ini 같은 확장자에 가져다 놓으면 notepad.exe가 나타나고 *.XlsX에 가져다 놓으면 Excel 아이콘이 나타납니다, pst 같은 파일이 있시면 클릭해 보세요 그럼 "연결 프로그램"이라고 나타나고 해당 확장자를 클릭할때 실행할 아이콘이 등록됩니다.(그렇다고 Exe를 가지고 테스트 하지는 마세요 ^^;;) 즐거운 하루 되세요.Anonymous
January 01, 2003
ㅋㅋㅋㅋ 그리고 Open 아이콘이 깨지신다는 내용, 깨지지 않고 제대로 보였을때는 혹시 3rd Party 제품의 아이콘이 아니였나요? 그렇다면 3'rd party 제품 문제의 가능성이 있습니다. 즐거운 하루 되세요~Anonymous
January 01, 2003
위 말씀은 우리 꼬알라군 블로그에도 오류라고 올리셨었네요. ^^Anonymous
January 01, 2003
그리고 사과까지 하시니 제가 죄송합니다. m( _ _ )m 글로 하는 소통은 참 어려운 것 같습니다. 가끔 블로그에서 일어나는 일들을 지켜 보면서 서로 얼굴 마주보고 이야기 하면 저러지 않을 텐데라는 생각을 합니다. 디자인 이슈에 대해서 의견 감사드립니다. ESC님의 의견은 제 개인적으로 봐서는 타당성이 있어 보입니다. Windows 7 모토가 ‘여러분의 아이디어로 만들었습니다’죠? 회사에서 중요 직책에 있는 사람은 아니지만 ESC님의 아이디어 책임을 가지고 피력해보겠습니다. 즐거운 하루 되십시오. 감사합니다.Anonymous
January 01, 2003
방문해주셔서 감사합니다 ^^ 네, AlwaysKeepMemorydump과 여기서 설명 드린 덤프생성 과정은 Windows version 6.1 (Windows 7, W2K8 R2)에서 새로 추가되었습니다.Anonymous
January 01, 2003
우선 간택(?) 감사드립니다. ^^ 특정 파일의 extension을 실행 할때는 그 파일을 실행하기 위한 Excute가 있습니다. Extension은 각각 다른 Excute를 가지게 되지요, Extension은 그래서 각각의 구별 가능한 아이콘이 있을 수 있습니다(이 Extension은 별도 등록이 가능합니다), 그런데 Excute는 Extension이 exe 하나이기 때문에 아이콘이 하나 일수 밖에 없겠지요? 그럼 보편적으로 이용될 수 있는 있어야 할 것 입니다. 오류라고 잘못알고 계셨던 그 아이콘이 바로 그것입니다. 해당 exe 아이콘는 제 기억에 예전부터 exe로 사용되어 왔습니다(콘솔용이 아닌). 처음에 오해하신 것 처럼 오류는 아니니 걱정마시기 바랍니다. 그리고 아이콘에 대한 의견은 제가 기회가 되면 개발팀에 일부 사용자들이 깨진것으로 잘못 이해할 가능성이 있음을 전달해 보도록 하겠습니다. :) 그리고 꼬알라님에 대한 언급에 "본사의 발표 자료를 너무 곧이 곧대로 전하는"이라는 표현이 있는데, 사람마다 받아 들이기가 다르겠지만 저는 '제품과 한국 IT의 컨셉과 철학(!)을 제대로 꽤뚫어 보고 한국에 맞게 전달하고 있다!'라고 생각합니다. 그리고 뭐든 서로 달라야 재미가 있고 기대가 되는건데요 말씀하신 꼬알라군에게 오린 댓글이 이것과 동일한 내용으로 올리셨다면 저랑 크게 답이 다를거라 생각하지 않기에 그리 기대 안되네요.. :)Anonymous
October 28, 2009
Windows2008 이하의 OS에서도 해당 Reg(AlwaysKeepMeorydump)를 추가하면 무조건 Dump를 생성하는지요?? 그리고 덤프생성과정이 이번 커널에서만 적용되는 것인가요?Anonymous
October 28, 2009
재밌게 잘 읽었습니다.. 7이 워낙 안정적이라 블루스크린 볼 기회를 없을 것 같습니다.. ^^; 하나 여쭙고 싶은게 있는데요.. 탐색기에서 *.exe 실행파일을 선택했을 때, 위쪽 메뉴에 있는 'Open' 아이콘 깨지는거에 대해서 어떻게 생각하시는지 궁금합니다.. ^^Anonymous
October 28, 2009
The comment has been removedAnonymous
October 29, 2009
에고.. 그걸 몰라서 올린 글은 아니고요.. ^^ 확장자에 해당하는 관련 실행프로그램이 뜨는건 좋은데요, 정작 실행파일 아이콘을 선택하면 아이콘이 깨지니, 보기가 좋지 않지요.. Windows 7을 맨처음 설치하고 Windows 폴더를 구경하고 있는데, explorer.exe, regedit.exe, notepad 아이콘이 메뉴 'Open' 항목에서 모두 깨져있길래 당황을 했었다는.. 차라리 *.exe 파일을 선택했을 때에는 아이콘 없이, 그냥 'Open' 명령만 나오도록 하는 것이 훨씬 좋았을 것 같습니다.. ^^Anonymous
October 29, 2009
네.. 제가 개발자였다면, *.exe 실행파일이 기본아이콘으로 나오도록 무미건조하게 놔두지는 않았을겁니다.. sankik님 말씀처럼, *.exe 파일을 선택했을 때에는 차라리 'Open' 을 'Run' 으로 바꾸고 'Run' 아이콘으로 일괄처리했으면 훨씬 깔끔한 뒷처리였다고 생각합니다.. 꼬알라님 견해도 궁금했기 때문입니다.. MS 관계자분들 중에서 눈에 띄는(?) 두 분을 선택했습니다.. 특히, 꼬알라님은 MS 본사의 발표나 자료를 너무 곧이 곧대로 전달하시는 모습을 꽤 자주 보여주셨기에.. 음.. 아무튼 꼬알라님의 견해는 더더욱 궁금하더군요.. 꼬알라님의 블로그에 새로운 장문의 댓글을 달았고 승인을 기다리는 중입니다.. 아주 재밌는 댓글을 올렸으니, sankim님께서도 기대해주시길 바랍니다.. :)Anonymous
October 29, 2009
sankim님 말씀처럼, 아이콘이 깨졌다는 표현은 적절치 않을 수도 있겠네요.. ^^ 기본실행 아이콘이 예전의 모습 그대로인건 잘 알고 있습니다.. 개발자의 의도가 그것이라면, 접힌 모양의 백그라운드는 없애고 그 안에 든 실행 아이콘만 크게 보여줬더라도 좋지 않았을까하는 생각을 해 봅니다.. 음.. 꼬알라님 얘기는 불필요한건데.. 괜한 얘기를 꺼낸 듯 하네요.. 죄송합니다.. 사용자마다 운영체제를 바라보는 관점이 틀리니까요.. 꼬알라님 블로그에 올린 글은 여기 댓글과 좀 다릅니다.. 보셨으면 아시겠지만 속성 단축키 문제와, 폴더 위치/크기 설정 문제가 추가되어 있습니다.. 두가지 이슈에 대한 재밌는 실험도 포함되어 있으니 기대하셔도 좋을겁니다.. :) 어쩌면 일반 사용자에게 있어서 무시될 수도 있는 아주 사소한 이슈이지만, 정말 너무나도 잘 만들어 놓은 Windows 7 의 '옥의 티'인 듯 하여 가볍게 견해를 듣고 싶었습니다.. P.S. extension, execution 설명 같은건 하지 않으셔도 되는건데.. 괜한 시간을 뺐은 것 같네요.. :^) 혹시, 제가 소통에 문제가 보였다면 진심으로 사과 드립니다.. 전 이렇게 서로의 시간을 뺏으려는게 절대 아니었는데..말입니다.. 또 댓글을 달진 모르겠지만, 앞으로도 좋은 포스팅 기대하겠습니다.. 저 또한 앞으로도 꾸준히 독자가 되고 싶습니다.. :)Anonymous
December 18, 2009
순서도 틀렸습니다. YES가 두개 있는 선택이 있네요. 하나로 해도 전혀 문제없는 순서도가 나오는데 왜 그러셨을까요. ^^; 기사 잘 보았습니다.Anonymous
September 24, 2010
FatherBr님이 틀리셨다고 하시는 부분은 도메인에 조인되어있는가? 부분에 화살표가 3개이고 yes도 2개가 그려져 있는것 말씀하시는것 같군요..Anonymous
February 19, 2013
질문이 있어서, 이렇게 글을 올립니다.. 포스트 된 날짜가 오래되긴 했지만... A: 풀덤프 생성시 : 물리적메모리 + 페이징 파일 크기 + 300mbytes 인가요? B: 풀덤프 생성시 : 페이징 파일 크기 + 300mbytes 인가요? 만약에 B라면, 물리적 메모리는 덤프파일 생성시 아무런 영향력이 없는 것인가요? 그리고 어떤 사이트에서는 뒤에 +300Mbytes 가 아닌 12mbytes라고 적혀있는 것도 있던데 OS 환경 혹은 CPU bit수에 따라 더해주는 값이 틀린건가요?