| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- Kubernets on Jenkins
- 그라파나 시각화
- helm
- headless service
- SAA 합격 후기
- Aurora cluster
- 딥레이서
- 솔데스크
- grafana on kubernetes
- Prometheus install
- blue-green
- Solution Architecture
- Kubernetes
- EFS CSI Driver
- 쿠버네티스
- EKS 클러스터
- AWS 딥레이서
- livenessPorbe
- LoadBalancer Controller
- Firelens
- 딥레이서 보상함수
- kubernetes 동작 원리
- terraform
- 그라파나 대시보드
- 깃허브 액션
- 메탈LB
- 쿠버네티스 컴포넌트
- github action 사용법
- 로드밸런서 컨트롤러
- jenkins
mingming
Windows 메모리 구조 본문
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 (가장 정확)
- Sysinternals Process Explorer 실행
- 프로세스를 더블 클릭
- 아래 항목 확인
- Working Set
- Private Working Set
- Shared 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가 회수 가능한 메모리 |
'Windows' 카테고리의 다른 글
| Windows MMC와 CPL (0) | 2025.09.21 |
|---|---|
| Windows TCP/IP 포트 고갈 문제 해결 (0) | 2025.06.03 |
| Windows 꼭 알아야 할 이벤트 로그 정리 (0) | 2025.05.19 |
| VSS 실습하기 - Volume Shadow Copy (0) | 2025.04.26 |
| VSS - Volume Shadow Copy Service 개념과 아키텍처 (1) | 2025.04.25 |