프로그래밍 언어 입문서가 아닌 프로그래밍 기초 개념 입문서
문과생, 비전공자를 위한 프로그래밍 입문책입니다.
jobGuid 꽃미남 프로그래머 "Pope Kim"님의 이론이나 수학에 치우치지 않고 실무에 곧바로 쓸 수 있는 실용적인 셰이더 프로그래밍 입문서 #겁나친절 jobGuid "1판의내용"에 "새로바뀐북미게임업계분위기"와 "비자관련정보", "1판을 기반으로 북미취업에 성공하신 분들의 생생한 경험담"을 담았습니다.
Posted by 랩.좀비
안녕하세요. 한 타임 게시를 하지 못한 랩좀비입니다. DOD - Data Oriented Design - 에 대해서 열심히 글을 쓰다가, 실무에 직접 적용해 보지 않고 마냥 좋은 거라고 쓰는 것은 어디서나 찾아 볼 수가 있어서, 지금 회사에서 열심히 DOD를 적용하려고 작업중인 일이 끝나면 회고도 하면서 올리겠습니다. ...언제가 될지는 약속 드릴 수가 없네요. 요즘에 이것 저것 하다보니 적용할 시간이 없더군요. 올해 전반기에는 반드시 할 수 있도록 노력하고 있습니다.

그건 그렇고, 여러분의 프로젝트는 메모리 릭이 얼만큼 발생하십니까? 프로그램이 종료되면 릭이 발생하지 않습니까? 제가 하고 있는 프로젝트도 프로그램이 종료될 때에는 모두 해지가 되어서 메모리릭이 발생하지 않습니다. 하지만, 게임에 들어가면 미친듯이 릭이 발생하고 있었어요. 종료할 때는 메모리릭이 표시되지 않지만 게임중에서는 해지 되지 않는 불편한 상태가 진행되고 있었습니다.

지금까지는 늘어나는 양이 눈에 띄지 않아서 무시해도 될만한 수준이었는데, 최근에 이 문제가 표면에 드러나서 - 무려 시스템 메모리를 2기가 이상까지 올려버려 new에서 badalloc Exception을 보내는 상태까지 가더군요.- 이것을 추적하기 위해 UMDH라는 툴을 사용했습니다. 해당 툴에 대해서 알려주신 모님께 감사를. 프로그래머의 실력은 디버깅에 있다는 생각이 문득 들더군요. 뭐 이건 개인적이 견해이니 넘어가구요...
 
오늘은 UMDH의 맛만 보도록 하겠습니다. 맛만 봐도 어지간한 메모리릭은 잡을 수 있어요.

UMDH는 메모리를 캡쳐하는 기능을 가지고 있습니다. 그리고 캡쳐된 2개의 로그를 비교해서 변화량을 알려주는 기능도 있지요. 그렇다면 이걸로 어떻게 메모리 릭을 잡느냐... 그냥 게임 시작하면 캡쳐(1)를 하고 여기 저기 돌아다니면서 메모리릭이 발생하는 곳을 찾아서 캡쳐(2)를 한 후, 1번과 2번을 비교해서 그 동안 할당된 로그를 뒤져보는 것입니다. 물론 할당되고 해지된 녀석은 나오지 않습니다. 

UMDH는 WinDBG가 있는 툴셋에 포함되어 있습니다. WinDBG짱좋아요잘쓰면님은나와다른초보 그럼 어떻게 사용하는지 한 번 봐볼까요?

1. 먼저 어플리케이션을 실행한 다음 UMDH가 적용될 프로그램에 '이놈에게 UMDH를 쓰겠소' 라며 알려줍니다.
저는 개발중인 클라이언트에 적용해 보겠습니다. 파일명만 있으니 보안에 접촉되지 않겠지.우리사장님은대범하시니까.
 


2. 그리고 캡쳐를 합니다. 캡쳐할 때 프로세스의 ID를 알아와야 하는데 이것은 tlist 명령어를 통해서 알아올 수 있습니다.

이렇게 알아와서


이렇게 캡쳐를 하지요.

 
심볼이 없다고 하는데, pdb파일이 있다면 무시하셔도 됩니다만, 정확한 체크를 위해서는 심볼 패스를 지정하는 게 더 좋긴 합니다. 심볼이 없으면 안나오는 정보도 있습니다.

3. 비교를 위해 프로그램을 조금 돌리다가 캡쳐를 합니다.



4. 이제 비교한 파일을 뱉어 달라고 UMDH에 요청합니다.



5. 만들어진 log를 열어봅니다. 굉장히 긴 파일이 만들어지는데, 이게 그 동안 할당된 메모리를 나타냅니다.
노란색으로 색칠해진 부분이 16진수로 표현된 바이트입니다.


이 툴을 이용해서 지난 1주일간 꽤 많은 릭을 잡아 냈습니다. 대부분이 스크립트에서 발생한 것이었지만, 프로그램 쪽에서도 해지 않고 있었던 메모리가 있었지요. UMDH 외에 LeakDiag라는 툴도 있습니다. 이쪽도 한번 구글링해서 테스트 해 보는것도 추천합니다. 무려 메모리 변화를 그래프로 출력해 주지요. 하지만 사용해 보니 프로그램의 상태를 툴에서 인젝션할 때 자주 다운되더군요.

암튼, 오늘도 가벼운 주제를 긁고 저는 이만 물러가겠습니다. 좋은 하루 되세요. 

댓글을 달아 주세요

  1. Favicon of https://gamedevforever.com cagetu 2012.02.17 10:16 신고  댓글주소  수정/삭제  댓글쓰기

    이거 맘에 드는구만요.. ㅎㅎ

  2. Favicon of https://gamedevforever.com 풍풍풍 2012.02.17 10:26 신고  댓글주소  수정/삭제  댓글쓰기

    좋은글 잘봤습니다!!

    상당히 유용하게 보입니다 __)

  3. Favicon of http://https://twitter.com/#!/dozingLamb/following/tweets 잠자는양 2012.02.17 17:04  댓글주소  수정/삭제  댓글쓰기

    DOD에 대한 글이 기대 됩니다. 사실 한글로 된 것은 랩 좀비님의 발표 자료랑 김학규 홈페이지의 번역 내용 외에 본게 없어서요...

  4. Favicon of https://gamedevforever.com 알콜코더 2012.02.28 19:37 신고  댓글주소  수정/삭제  댓글쓰기

    오 유용한 팁 감사~감사~~

  5. Favicon of https://gamedevforever.com imays 2015.06.19 21:44 신고  댓글주소  수정/삭제  댓글쓰기

    유용한 팁 감사합니다.
    비교 파일을 분석하기가 어렵길래, 이를 쉽게 보여주는 툴을 만들었습니다. 써보세요!

    https://github.com/Nettention/UmdhViz/