윈도우 메모리의 이해

워크스테이션이나 서버에 설치한 패키지에는 해당 응용프로그램들이 요구하는 최소 / 권장 사양이 있습니다. 서버의 원활한 작동을 위해 필요한 메모리 양을 계산하기 위해 요구사항만을 가지고 결정하는 것은 위험한 생각입니다.

반면, 메모리는 크면 좋다는 생각으로 비싼 비용을 지불하는 것도 문제가 될 수 있습니다. 서버 개발자나 관리자는 윈도우 서버의 메모리 사양을 확인하는 것은 물론 실제 필요한 메모리 상양을 체크하는 작업도 진행해야 낭비를 막을 수 있습니다.

우선 서버를 주문하는 시점의 메모리 선택은 들어가는 솔루션의 권장 메모리 사양의 2배 정도를 선정하고 실제 서비스를 돌리면서 최적의 메모리 크기를 만들어 가야 합니다. 이런 면에서 최근 아마존 Cloud 서비스들이 각광받는 이유가 만들어 지기도 합니다.

시스템 메모리가 충분하지 않으면 하드 디스크에 swap 파일로 정보를 swapping하므로 컴퓨터의 속도가 느려집니다. 윈도우에서는 이런 swap file을 “가상 메모리”라고 합니다.

윈도우 서버가 정보를 가상 메모리로 옮기고 다시 가져오는 과정에서 컴퓨터는 대기하게 됩니다. 이것은 하드드라이브의 I/O가 메모리보다 훨씬 느리기 때문입니다. 가상메모리를 사용하는 동안 CPU의 데이터 처리가 중단될 뿐 아니라 필요한 파일과 데이터를 가져오기 위해 디스크에 접근하지도 못하게 됩니다. 물리 메모리가 부족하여 가상 메모리를 사용하게 되면 서버의 성능은 그만큼 떨어집니다.

이런 문제를 찾아내고 해결하기 위해 Windows는 다양한 유틸리티를 제공하고 있으며, 이런 도구들을 사용하면 서비스에 필요한 메모리의 크기를 계산하고 가상메모리의 최적화도 진행할 수 있게 됩니다.

윈도우 버전별 메모리 지원 사양

해당 서비스를 구동하기 위해 필요한 메모리 사양으로 4GB 이상이 필요하다면 32bit 기반의 Windows 2000 Professional을 사용할 수 없습니다. 그렇기 때문에 윈도우 버전 별로 지원되는 메모리 사양을 알면 도움이 됩니다. 예를 들어 "Windows Server 2008 R2 Enterprise/Datacenter"는 메모리를 2TB까지 증설할 수 있습니다.

윈도우메모리

작업 관리자를 사용한 메모리 모니터링

윈도우는 메모리 사용을 추적할 수 있는 여러 가지 도구들을 제공합니다. 이런 도구들은 메모리를 사용하는 방법과 가상 메모리를 너무 많이 사용하여 병목 현상이 일어나는지 여부를 판단할 때 도움이 됩니다. 메모리 사용을 추적하기 위해 이용할 수 있는 가장 일반적인 도구에는 세가지가 있습니다. 바로 작업 관리자 (Task Manager)와 리소스 모니터(Resource Monitor) 그리고 성능 모니터(Performance Monitor) 입니다.

작업 관리자에서 메모리 사용을 모니터링 하려면 을 누른 다음 [작업관리자(K)]를 클릭합니다. [작업관리자] 대화 상자가 표시되면 [성능(Performance)] 탭을 클릭합니다.

작업관리자

작업 관리자를 통해 메모리 사용을 단기적으로 평가할 수 있습니다. 가상 메모리의 크기와 RAM 크기의 균형이 크게 어긋날 경우 시스템 메모리의 크기를 늘려야 합니다. 성능 모니터를 이용하여 컴퓨터의 메모리 사용을 장기적으로 검사할 수도 있습니다.

각각의 지표들은 다음과 같습니다.

메모리사용

  • 8.0GB DDR3: 제가 가진 노트북에는 4GB의 DDR3 메모리가 2개 꽂혀 있습니다.
  • 7.9GB: 실제 윈도우가 사용할 수 있는 메모리의 양을 보여줍니다. 디바이스가 점유한 공간이 있다면 빼고 표시하게 됩니다. 제 애플 노트북이 내장 그래픽 카드를 사용하기 때문에 내장 그래픽 카드가 점유한 100MB를 뺀 7.9GB를 보여주고 있습니다. 외장 그래픽 카드를 사용한다면 8.0GB로 표시됩니다.
  • 메모리 사용(Memory usage per second): 초당 메모리 사용률을 보여주고 있습니다.

메모리 구성

  • 메모리 구성(Memory composition): 이것은 가상 메모리가 아닌 물리적인 메모리를 보여주는 것입니다. 3개의 파트로 이루어져 있으며 왼쪽 첫 번째 구역은 프로세스와 드라이버에 의해 사용되는 메모리를 보여주고 있으며 오른쪽 두 개의 영역은 사용 가능한 메모리를 보여주고 있습니다. 오른쪽 두 개의 영역 중 맨 오른쪽 공간은 Free 메모리 공간을 의미하며 실제로 사용 된 적이 없거나 이미 깨끗이 청소 된 메모리 공간입니다.
  • 사용 중(In Use): 전체 7.9GB의 메모리 공간 중 프로세스, 드라이버 또는 운영체제에서 3.6GB를 사용하고 있다는 것을 알 수 있습니다.
  • 사용 가능(Available): 전체 7.9GB의 메모리 공간 중에서 사용자 프로세스에 의해 비워질 수 있거나 이미 비워져 있는 공간이 4.3GB이라는 것입니다.

커밋됨 / 캐시됨

  • 커밋됨 (Committed): 가상 메모리와 물리 메모리의 합산입니다. 전체 9.6GB중에서 5.2GB를 사용하고 있습니다.
  • 캐시됨 (Cached): 프로세스, 드라이버 또는 운영체제에서 신속히 접근 가능한 메모리를 의미합니다. 이미 사용된 적이 있지만 필요하면 사용할 수 있는 메모리가 4.1GB라는 것을 알 수 있습니다.
  • Free memory: 사용된 적이 없는 언제든 사용할 수 있는 메모리 공간을 의미합니다.
  • 하드웨어 예약: 8.0GB의 RAM을 설치했지만 하드웨어가 91.7MB를 예약했기 때문에 7.9GB의 물리메모리를 사용할 수 있다는 것을 알 수 있습니다.

페이징풀

시스템이 초기화 될 때, 메모리 관리자는 커널모드 구성 요소들이 시스템 메모리를 할당하기 위해 사용하는 두 가지 종류의 동적으로 크기가 변하는 메모리 풀 공간을 생성합니다.

  • 페이징 풀 (Paged pool): 실제 메모리에서 제거되어 페이징 파일에 기록 될(page out)수도 있고 반대로 페이징 파일에서 실제 메모리로 올라올(Paged in) 수 있는 시스템 공간의 가상 메모리 영역입니다. 페이징 풀 메모리는 윈도우 운영체제와 장치 드라이버가 사용할 수 있도록 따로 비축한 메모리입니다.

어떤 이유로 인해 페이징 풀 메모리가 고갈될 경우 시스템 장치 드라이버 실행이 안 될 수 있으며, 결과적으로 해당 드라이버를 사용하는 프로그램에 여러 가지 문제가 발생할 수 있습니다. 이 오류는 32 비트 운영체제 또는 작은 양의 RAM 또는 권장 페이지 파일보다 낮은 양의 메모리를 사용하는 운영체제에서 자주 발생하는 오류입니다. 더 많은 프로그램, 운영 체제 서비스(안티바이러스, 방화벽 등), 장치(음성, 비디오, 네트워크 등)를 사용할수록, 페이징 풀에 할당된 메모리가 사용됩니다. 만약 할당된 메모리를 모두 사용하게 되면 드라이버 및 윈도우 자체에서 필요한 메모리 할당을 할 수 없게 됩니다. 이로 인해 성능이 저하될 수 있으며, 비디오가 느려지거나, 프로그램 강제 종료, 심각하게는 시스템 종료 및 블루 스크린이 발생할 수 있습니다.

  • 비페이징 풀 (Nonpaged Pool): 언제나 실제 메모리에 상주하여 어느 IRQL 수준에서나 어느 프로세스 컨텍스트에서나 페이지 폴트를 내지 않고 엑세스 할 수 있다고 보장된 시스템 가상 주소 영역입니다.

리소스 모니터의 메모리 탭

리소스 모니터는 Windows 7 및 Windows Server 2008의 새로운 기능으로 나온 프로세스와 서비스에서 시스템 리소스가 사용되는 방법을 이해하기 위한 강력한 도구 입니다.

리소스 모니터를 실행하는 방법은 명령 창에서 “resmon”을 입력하면 됩니다.

리소스 모니터 열기

또는 작업 관리자 화면에서 리소스 모니터링 열기를 클릭하면 리소스 모니터가 바로 실행됩니다.

리소스 모니터

리소스 모니터를 사용하면 작업 관리자보다 좀 더 세밀한 지표들을 확인 할 수 있습니다. 프로세스 별 메모리 지표와 현재 메모리 상태를 한눈에 확인 가능한 좋은 도구이며 개발과정에서 작업중인 프로세스의 메모리 정보를 확인 할 수 있기 때문에 많은 도움이 됩니다.

우선 하단에 바 그래프를 보면 작업 관리자에서 설명한 내용과 미세하게 다른 것을 알 수 있습니다. 각각의 지표는 다음과 같습니다.

  • 하드웨어 예약: BIOS와 주변 장치용 일부 드라이버에 사용하도록 예약된 메모리 입니다. (하드웨어 예약 메모리 용량 = 설치된 메모리 용량 – 전체 메모리 용량)

  • 사용 중: 프로세스, 드라이버 또는 운영체제에서 사용중인 메모리입니다.

  • 수정한 날짜: 다른 용도로 사용하기 전에 콘텐트를 디스크에 기록해야 하는 메모리입니다.

  • 대기 모드: 사용 중이지만 그대로 파괴해도 상관 없는 메모리 영역입니다. 요구가 있다면 사용되지만 요구가 없다면 그 대로 파괴되는 대기 상태의 것이며 파일의 읽기 캐시랑 프로그램의 코드 캐시 등에서 이용 됩니다. 파일은 먼저 캐시에 읽혀지지만(대기모드로 된다) 여기서 데이터를 쓰면 ‘수정한 날짜’로 되고 게다가 이 데이터를 외부 디스크 등에 쓰면(flush 하면) 또 대기 모드로 됩니다. ‘여유’ 영역과 함께 ‘이용 가능’한 영역으로 분류 됩니다.

  • 여유: 중용한 데이터를 포함하지 않고 프로세스, 드라이버 및 운영체제에서 추가 메모리가 필요할 때 먼저 사용되는 메모리입니다. 여유 영역이 없다면 ‘대기 모드’를 사용하던가 ‘수정한 날짜’ 영역을 flush 해서 확보합니다. 그래도 부족한 경우라면 ‘사용 중’ 영역을 외부에 스왑 아웃 해서 확보한다.

  • 사용 가능: 프로세스, 드라이버 및 운영체제에서 즉시 사용할 수 있는 메모리 (대기모드 + 여유)

  • 캐시됨: “대기 모드”와 “수정한 날짜”의 합입니다.

  • 전체: RAM이 가진 물리적 용량에서 디바이스에 예약된 크기를 제거한 사용 가능한 메모리 공간을 의미합니다. 제 노트북은 내장 그래픽에 예약된 91.7MB를 빼야 하므로 8100MB가 나옵니다.

  • 설치됨: RAM이 가진 물리적 용량입니다. 제 노트북은 4GB가 2개 설치되어 있으므로 8GB (1024MB x 8 = 8192MB) 입니다.

여기까지 윈도우 기본 모니터링 도구를 사용하여 메모리를 분석하는 데 필요한 기본 지식들을 정리하였습니다. 윈도우는 성능 모니터 또한 제공하고 있지만 성능 모니터에 대한 이야기는 다음에 진행하도록 하겠습니다.

관련 정보

  • https://technet.microsoft.com/library/Dd878107#mainSection(Windows 2000에서의 메모리 사용 이해)
  • https://en.wikipedia.org/wiki/ComparisonofMicrosoftWindowsversions (Comparison of Microsoft Windows versions)
  • http://windows.microsoft.com/ko-kr/windows/what-task-manager-memory-columns-mean#1TC=windows-7 (작업 관리자 메모리 열의 의미)
  • http://sungtg.tistory.com/908 (윈도우 메모리사용에 대해 질문 좀 하겠습니다)
  • http://www.simpleisbest.net/post/2011/05/02/Virtual-Memory-vs-Physical-Memory.aspx (가상 메모리의 기본 개념)
  • http://rickardnobel.se/windows-server-2012-new-task-manager/ (Windows Server 2012: new Task Manager)
  • https://kr.battle.net/support/ko/article/starcraft-ii-paged-pool-memory (스타크래프트 II – 페이징 풀 메모리 문제)
  • http://jacking.tistory.com/776 (컴퓨터의 메모리 이용 상태를 자세히 알고 싶을 때 – 리소스 모니터)