고용량 메모리를 제대로 활용하고 계십니까? :: 2007/11/10 17:19


전 작업 표시줄을 세 줄로 사용합니다. 노트북이라 보통은 자동 숨김 옵션을 켜두고 사용하죠. 그래서 평소 때 작업할 때는 아래와 같은 화면이 연출되곤 합니다. 물론 아래 화면은 보여주기 위해서 무작위로 탐색기와 익스플로러를 많이 띄운 것입니다. 보통 때는 각기 다른 창들로 저만큼의 공간을 차지 한다는 것이죠.

사용자 삽입 이미지

얼마전에 우연찮은 기회에 노트북 메모리를 업그레이드 할 수 있었습니다. 원래 1GB였는데, 업그레이드해서 2.5GB가 되었죠. 업그레이드하면서 스왑이 좀 줄겠군 이라고 생각했습니다. 역시 생각대로 덜 버벅대더군요. 그런데 웃긴게 예전에는 한 번도 보지 못했던 메모리 부족으로 프로그램을 실행할 수 없다는 메시지를 몇 번 보게 되었습니다. 어제 오늘 한 5~6회 만난것 같네요. 처음엔 바이러슨가 하고 생각하다가, 창을 닫으면 다시 실행되길래 그건 아닌가보다고 생각을 했습니다. 그리곤 작업관리자를 띄워서 확인해 봅니다. 늘 상 할당된 메모리가 1.2 ~ 1.4GB 사이더군요. 이렇게 메모리가 많이 남았는데 왠 메모리가 부족하다는 말이 나올까 궁금했습니다.

프로그램을 한 번 만들어봤습니다. 과연 이 녀석이 2GB를 쓰긴 할까 하는 생각으로 말이죠. 할당만 마구마구 하는 프로그램을 만드니 금새 2GB까지 사용하더군요. 그 상태에서 다른 프로그램들을 띄워 보았습니다. 메모리가 없는데도 잘 뜹니다. 당연하겠죠. 스왑이 있으니까요. 그럼 제가 아까 본 메모리 부족 오류는 무엇일까요? 그 다음 추측은 GDI 객체 였습니다. 창을 많이 띄우면 GDI 객체도 늘어나고 그것 때문에 창이 생성이 되지 않을 것이라는 추측을 한 것이죠. 그래서 작업 표시줄을 띄워놓고 좀 테스트를 해봤습니다. 그랬더니 정말 GDI 객체랑 연관이 있어 보였습니다.

사용자 삽입 이미지

그런데 제가 이제껏 알기론 NT 계열 운영체제에서는 GDI 객체의 경우 메모리가 허용하는 한도 내에서 생성이 되는 걸로 알고 있었습니다. 그게 상식에 부합하잖아요. 앞서 만들었던 프로그램을 수정해서 GDI 객체를 무작위로 생성하도록 만들었습니다. 10000개 가까이 되니 더 이상 생성을 못하더군요. 이상했습니다. 메모리는 넘쳐나는 상황이었거든요. 구글에 물어보니 역쉬나 레이몬드 첸 아저씨가 친절하게 답변을 해주시는 군요.

http://blogs.msdn.com/oldnewthing/archive/2007/07/18/3926581.aspx

하지만 이건 앞서 생각했던 근본에 대한 답변은 아니죠. 프로세스 당 제한이니까요. GDI 객체를 생성하던 놈이 9000개 정도 생성한 다음 다른 프로그램을 실행하면 잘 됩니다. 그렇다면 도대체 그 메모리 에러는 왜 난 것일까요? 답은 아래 페이지에 나와 있습니다. 2.5GB의 메모리를 장착하고도 데스크탑 힙이 3MB로 한정되 있어서 메모리가 부족하다는 오류를 만난 것이었습니다. 8MB로 늘려 주었습니다. 이제는 더 이상 메모리가 부족해서 창을 생성할 수 없다는 오류 메시지를 만나지 않겠죠. ㅋㅋㅋ

http://www.techarp.com/showarticle.aspx?artno=238
http://weblogs.asp.net/kdente/archive/2004/06/04/148145.aspx
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q126962
http://monac.egloos.com/1396478
http://www.blogcastrepository.com/blogs/mattbro/archive/2006/08/21/2013.aspx
http://support.microsoft.com/default.aspx?scid=kb;EN-US;184802
http://www.techarp.com/showarticle.aspx?artno=238&pgno=1
http://msdn2.microsoft.com/en-us/library/ms724291.aspx

데스크탑 힙을 늘리는 방법은 간단합니다. 레지스트리 에디터에서 "HKEY_LOCAL_MACHINE -> SYSTEM -> CurrentControlSet -> Control -> Session Manager -> SubSystems"를 엽니다. 거기서 Windows 항목을 선택합니다. 그럼 아래와 같은 긴 문자열을 볼 수 있을 겁니다.

%SystemRoot%\system32\csrss.exe
ObjectDirectory=\Windows
SharedSection=1024,3072,512
Windows=On
SubSystemType=Windows
ServerDll=basesrv,1
ServerDll=winsrv:UserServerDllInitialization,3
ServerDll=winsrv:ConServerDllInitialization,2
ProfileControl=Off
MaxRequestThreads=16

위 부분에서 SharedSection=1024,3072,512 부분이 핵심입니다. 여기서 두 번째 항목인 3072가 데스크탑 힙으로 할당된 메모리의 크기입니다. 단위가 킬로바이트이기 때문에 계산하면 3메가가 됩니다. 저 숫자를 올려 주시면 됩니다. 8192로 지정하면 8MB가 되겠죠. 바꾸고 저장하고 재부팅하면 됩니다.

네이버에 북마크 다음에 북마크 마가린 바르기 HanRSS에 북마크하기 이올린에 북마크하기 News2.0에 투고하기 del.icio.us에 북마크하기 Digg에 번역해 투고하기 dzone에 번역해 투고하기 붐바
이올린에 북마크하기(0) 이올린에 추천하기(0)
스폰서
글타래

  • 2주간 인기 글
  • 2주간 인기글이 없습니다.
Trackback Address :: http://www.jiniya.net/tt/trackback/644
  • Gravatar Image.
    Maro | 2007/11/10 17:31 | PERMALINK | EDIT/DEL | REPLY

    아.. 제 컴퓨터도 3MB로 설정되어있네요 :)
    저도 살짝 8MB로 바꿨습니다.
    오늘도 좋은것 배워가네요 ~_~)/

    • Gravatar Image.
      codewiz | 2007/11/10 17:56 | PERMALINK | EDIT/DEL

      OS 버전에 따라 차이가 있는것 같긴 한데, XP는 그냥 설치하면 다 기본으로 3MB로 잡히나 봐요. ^^;;

  • Gravatar Image.
    window31 | 2007/11/11 23:53 | PERMALINK | EDIT/DEL | REPLY

    멋져요~ 저라면 무한 할당을 시켜보고 거기서 포기했을 텐데... GDI까지 생각하리라고는...
    테스크매니저의 GDI 객체 옵션은 처음 봅니다 좋은정보 감사 :)

    • Gravatar Image.
      codewiz | 2007/11/12 12:41 | PERMALINK | EDIT/DEL

      한 세 번 봤을 때 까지는 참았는데, 자주 뜨니깐 정말 못 참겠더라고요. 구글님의 도움이 컸죠. ^^;;

  • Gravatar Image.
    thinker0 | 2007/11/12 19:28 | PERMALINK | EDIT/DEL | REPLY

    Windows 2003 R2은 기본적으로 SharedSection=1024,20480,768 이렇게 되네요 ^^;

    • Gravatar Image.
      codewiz | 2007/11/13 12:41 | PERMALINK | EDIT/DEL

      그렇군요.
      서버 운영체제라 그런지 엄청 많이 잡혀있네요 ^^;;

  • Gravatar Image.
    ┕ⓒⓞⓞⓛ┙ | 2007/11/20 14:24 | PERMALINK | EDIT/DEL | REPLY

    좋은 정보 감사합니다.
    만약 비스타에 4GB면 몇 메가로 해주는 것이 좋을까요?

    • Gravatar Image.
      codewiz | 2007/11/20 15:15 | PERMALINK | EDIT/DEL

      정해진 답이 있는 것은 아닙니다. 데스크탑 메모리 라는게 윈도우 객체, 훅 객체 등을 저장되는데 사용되는 메모리이기 때문에 평소 얼마나 많은 창을 띄워놓고 사용하는지에 따라 다르답니다.

      평소에 컴퓨터를 사용하면서 한번이라도 메모리 부족으로 프로그램이 실행되지 않은 적이 있다면 그 때 늘려주시면 됩니다. 자신이 지금 어느 정도의 윈도우를 생성하는지 알고 싶으시다면 탐색기를 계속 띄워보세요. 윈도키 + E를 누르면 계속 실행됩니다. 어느 순간 아마 탐색기가 실행이 되지 않는 순간이 있을 겁니다. 그 만큼이 지금 생성할 수 있는 최대 창의 개수 입니다. 물론 프로그램에 따라 다르지만 대략 그 정도로 볼 수 있습니다. 그 창의 개수가 작다고 생각하신다면 위에 나온 레지스트리 값을 조절해 주시면 됩니다. 두 배로 늘린다면 탐색기 창을 두 배 정도 더 만들 수 있다는 것을 의미합니다. 평소 자신이 띄워놓고 사용하는 창의 개수에 맞춰서 정하는 것이 바람직합니다.

Name
Password

Homepage
Secret
< PREV | 1| ... 26|27|28|29|30|31|32|33|34| ... 540| NEXT >