우리는 다양한 방법을 사용하여 Windows에서 메모리의 사용을 추적할 수 있습니다. 윈도우즈는 기본적으로 작업 관리자 (Task Manager), 리소스 모니터(Resource Monitor), 성능 모니터(Performance Monitor) 을 제공합니다. 이들은 어떻게 사용되는지 그리고 각각의 항목은 어떤 의미를 가지고 있는지 알아보도록 하겠습니다.
작업 관리자에서 메모리 사용량을 모니터링하려면 [Ctrl + Alt + Del] 을 누른 다음 [작업관리자(K)]를 클릭합니다. [작업관리자] 대화 상자가 표시되면 성능(Performance)탭을 클릭합니다.
작업 관리자를 통해 최근 1분간 메모리 사용량을 단기적으로 평가할 수 있습니다. 가상 메모리의 크기와 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)입니다.
여기까지 윈도우 기본 모니터링 도구를 사용하여 메모리를 분석하는 데 필요한 기본 지식들을 정리하였습니다. 윈도우는 성능 모니터 또한 제공하고 있지만 성능 모니터에 대한 이야기는 다음에 진행하도록 하겠습니다.