– 시스템의 숨겨진 메모리 공간, 친구일까 적일까?
"메모리는 부족한데 시스템은 멈추지 않고 돌아간다?"
이럴 때 등장하는 비장의 카드가 바로 **스왑(Swap)**입니다.
📌 스왑 메모리란?
**스왑 메모리(Swap Memory)**는 RAM이 부족할 때 디스크 공간을 임시 메모리처럼 사용하는 영역입니다.
즉, 실제 물리 메모리가 꽉 찼을 때, 사용하지 않는 데이터를 디스크로 옮겨 RAM을 확보하는 방식입니다.
리눅스/유닉스 계열 시스템에서는 일반적으로 swap partition 또는 swap file을 만들어 사용합니다.
🔧 스왑 동작 방식 (간단히)
- RAM이 부족해짐
- 커널이 사용 빈도가 낮은 메모리 페이지를 Swap 공간으로 이동
- 필요한 경우 다시 디스크에서 RAM으로 재로딩
⚙️ 스왑의 종류
종류 설명
스왑 파티션 | 디스크에 별도의 영역으로 지정된 고정 공간 |
스왑 파일 | 기존 파일 시스템 위에 생성한 파일 기반 스왑 공간 (유연한 크기 조절 가능) |
✅ 스왑 메모리의 장점
장점 설명
🛡 시스템 안정성 | RAM이 부족할 때 갑작스러운 크래시를 막음 |
📈 처리 여유 확보 | 일시적인 고메모리 사용 처리 가능 |
💸 비용 절감 | 저용량 RAM 서버에서도 일시적 대체 가능 |
❌ 스왑 메모리의 단점
단점 설명
🐢 느린 속도 | 디스크는 RAM보다 수십~수백 배 느림 (특히 HDD) |
🌀 시스템 지연 | 과도한 스왑 사용은 시스템을 심각하게 느리게 만듦 ("스왑 폭주" 현상) |
🔧 성능 튜닝 필요 | 적절한 swappiness 값 조절 필수 |
📊 언제 스왑을 써야 할까?
상황 스왑 사용 판단
✅ 일시적인 고메모리 부하 | YES |
✅ 비중요 백그라운드 작업이 많음 | YES |
❌ 실시간성/저지연 서비스 운영 중 | NO (성능 저하 위험) |
❌ RAM을 충분히 확보 가능 | NO (스왑 자체 비활성화 고려 가능) |
⚙️ 실무 팁
✅ 스왑 확인 명령어
free -h
또는
swapon --show
✅ swappiness 설정
# 현재 swappiness 값 확인
cat /proc/sys/vm/swappiness
# 값을 10으로 낮춰서 RAM 우선 사용
sysctl vm.swappiness=10
기본값은 60입니다.
10~20은 RAM 우선,
80 이상은 스왑을 더 적극 사용하게 됩니다.
🚨 스왑이 과도하게 사용된다면?
- RAM 증설 고려
- 불필요한 프로세스 종료
- 스왑 해제 후 재할당
# 스왑 해제
swapoff -a
# 다시 활성화
swapon -a
k8s 노드에서 스왑 메모리를 끄는 이유
성능 예측 불가능
# 스왑이 켜져있으면
Pod A: 2GB 메모리 요청 → 실제로는 1GB RAM + 1GB 스왑 사용
# 성능이 매우 느려질 수 있음
리소스 관리 혼란
- 쿠버네티스: "이 Pod는 2GB 메모리 사용 중"
- 실제 상황: 1GB는 디스크(스왑)에 있어서 엄청 느림
- 스케줄러: 잘못된 정보로 Pod 배치 결정
QoS(Quality of Service) 보장 불가
# Guaranteed Pod (최고 우선순위)
resources:
requests:
memory: "1Gi"
limits:
memory: "1Gi"
- 스왑이 있으면 "보장된" 성능이 보장되지 않음
OOM Killer 동작 방식
- 스왑 OFF: 메모리 부족 시 명확한 OOM Kill
- 스왑 ON: 시스템이 느려져서 문제 파악 어려움
컨테이너 격리 원칙
쿠버네티스는 "예측 가능한 성능"을 제공해야 하는데, 스왑은 이를 방해합니다.
요약: 스왑은 메모리 부족을 "숨기는" 기능이지만, 쿠버네티스는 메모리 부족을 "명확히 드러내서" 적절히 대응하길 원합니다.
🧠 마치며
스왑 메모리는 필요할 때 똑똑하게 쓰면 도움이 되지만,
무턱대고 쓰면 시스템의 발목을 잡는 요소가 됩니다.
"스왑은 보험이다. 없으면 불안하고, 과하면 해롭다."
적절한 설정과 모니터링을 통해, 스왑도 성능 튜닝의 중요한 무기가 될 수 있습니다.
🔗 추천 자료
필요하면 Markdown, Notion, 또는 블로그 플랫폼용 (브런치/티스토리) 포맷으로도 정리해드릴게요.
'Computer Science > Operating System' 카테고리의 다른 글
운영체제의 구조 (0) | 2020.09.06 |
---|---|
운영체제의 역사 (0) | 2020.09.05 |
운영체제 개요 (0) | 2020.09.05 |
댓글