mingming

Windows 메모리 구조 본문

Windows

Windows 메모리 구조

mingming_96 2025. 11. 22. 18:12

Windows 메모리 구조

Committed, Working Set, Shared Memory, 반환 가능한 메모리까지

Windows 서버나 VM에서 메모리를 분석하다 보면
Committed, Working Set, Private, Shared 같은 용어들이 헷갈릴 때가 많습니다.
특히 아래와 같은 의문이 자주 생깁니다.

  • Working Set이 왜 Committed보다 더 클까?
  • 프로세스가 실제로 운영체제에 돌려줄 수 있는 메모리는 어떻게 확인할까?
  • Committed / Working Set / Private Memory의 관계는 어떻게 되나?

이 글에서는 Windows 메모리 구조를 기반으로
실제 운영 환경에서 메모리를 해석하는 방법을 정리했습니다.


1. Windows 메모리 구조 기본 이해

Windows는 프로세스 메모리를 크게 두 가지로 나눕니다.

✔ Virtual Memory (가상 메모리)

프로세스가 논리적으로 확보한 주소 공간.

✔ Physical Memory (물리 메모리)

RAM에 실제 올라가 있는 페이지.

이 둘을 구분해서 관리하기 때문에 각종 메모리 지표가 따로 존재합니다.


2. Committed Memory란?

Committed Memory = 프로세스가 OS로부터 ‘보장받은 메모리’

  • 반드시 확보되어야 하는 Private 메모리
  • 페이지파일 포함
  • OS가 마음대로 회수할 수 없는 영역
  • 프로세스 단위 “필수 메모리”

즉, “이건 꼭 필요하니 보장해줘”라고 OS에 요청한 양입니다.


3. Working Set(작업 집합)이란?

Working Set = 실제 RAM에 올라와 있는 물리 메모리 전체

다음 요소들이 모두 포함됩니다.

  • Private Working Set
  • Shared Working Set
  • File-backed pages
  • Prefetch / Cache pages

즉, 프로세스가 지금 당장 RAM에서 사용 중인 모든 페이지입니다.


4. 왜 Working Set이 Committed보다 클까?

많은 관리자들이 여기서 의문을 가집니다.

✔ Resource Monitor에서 WS > Commit이 나오는 이유

Commit에는 Private 메모리만 포함되지만,
Working Set에는 Shared + File-backed + Private 모두 포함되기 때문입니다.

예시)

Committed Working Set
1,668 KB 117,040 KB
5,120 KB 18,864 KB
215,324 KB 222,228 KB

이처럼 Working Set이 더 크게 보이는 것은
Shared 메모리가 Process의 WS로 잡혀서 그런 것이며 완전히 정상입니다.


5. Private / Shared / File-backed / Stanby Cache 메모리 차이

구분 설명 회수 가능 여부
Private 프로세스 고유 메모리 △ 가능하지만 제한적
Shared DLL 등 다른 프로세스와 공유 ⭕ 가능
File-backed 파일 매핑 기반 ⭕ 가능
Standby Cache 캐시 페이지 ⭕ 가능

→ “회수 가능”한 것들이 WS에 포함되므로 WS가 커질 수 있음.


6. 반환 가능한 메모리(Reclaimable Memory)란?

운영체제가 상황에 따라 언제든지 회수(trim)할 수 있는 메모리입니다.

포함되는 영역:

  • Shared Working Set
  • File-backed Working Set
  • Standby list
  • Modified pages(디스크에 쓰면 회수 가능)

즉, Working Set의 상당 부분은 언제든지 회수 가능한 메모리라는 뜻입니다.


7. 반환 가능한 메모리 확인 방법

❗ Resource Monitor로는 정확한 확인 불가

Resource Monitor는 Private Working Set 표시가 없음
→ 반환 가능한 메모리 계산 자체가 불가능.

정확한 확인은 아래 두 가지 방법으로만 가능합니다.


✔ 방법 1) Process Explorer (가장 정확)

  1. Sysinternals Process Explorer 실행
  2. 프로세스를 더블 클릭
  3. 아래 항목 확인
    • Working Set
    • Private Working Set
    • Shared Working Set
반환 가능 메모리 = Working Set - Private Working Set
  • Working Set = 120MB
  • Private WS = 20MB

→ 반환 가능 메모리 = 100MB

즉, OS가 필요하면 100MB는 바로 회수할 수 있습니다.


✔ 방법 2) Perfmon Counter 사용 (운영 수준)

  • Process → Working Set
  • Process → Working Set – Private
  • Memory → Standby Cache
  • Memory → Modified Page List

이 조합을 통해 프로세스의 “실제 필요한 메모리”와
“회수 가능한 메모리”를 정확히 구분할 수 있습니다.


8. 메모리 누수 판단 기준

  • Commit 증가 → Private Memory 증가 → 누수 가능성 높음
  • Working Set 증가만으로는 누수 판단 불가 (캐시 포함)
  • Shared WS는 누수와 무관

진짜 위험한 것은 Commit이 끝없이 증가하는 경우입니다.


9. 최종 정리

항목 의미
Committed 프로세스가 예약한 Private 메모리 (반환 불가)
Working Set 현재 RAM에 올라온 전체 메모리
Private Working Set 프로세스가 반드시 필요한 최소 메모리
WS - Private WS OS가 회수 가능한 메모리