리눅스 서버를 운영하다 보면 RAM 용량이 부족해지는 순간이 옵니다. 이때 시스템이 멈추지 않고 계속 작동하게 해주는 '최후의 보루'가 바로 **스왑(Swap)**입니다.
오늘은 리눅스의 메모리 관리 핵심 기술인 스왑의 동작 원리와 메커니즘을 정리해 보겠습니다.
1. 스왑(Swap)이란 무엇인가?
스왑은 물리적 메모리(RAM)의 용량이 가득 찼을 때, 하드 디스크(HDD/SSD)의 일부 공간을 메모리처럼 사용하는 기술입니다.
- 역할: RAM 확장 효과를 주어 시스템의 안정성을 높입니다.
- 특징: 디스크를 사용하기 때문에 RAM보다 훨씬 느립니다. (I/O 속도 차이 발생)
2. 스왑의 핵심 동작 메커니즘
리눅스 커널은 페이징(Paging) 기법을 통해 메모리를 관리합니다. 스왑은 이 페이징 과정의 연장선에 있습니다.
① Swap-Out (Page-Out)
시스템에서 당장 사용하지 않는 메모리 블록(Page)을 RAM에서 디스크의 스왑 영역으로 옮기는 과정입니다. 주로 오랫동안 참조되지 않은 'Idel' 상태의 데이터가 대상이 됩니다.
② Swap-In (Page-In)
스왑 영역에 저장된 데이터를 프로세스가 다시 필요로 할 때, 해당 데이터를 디스크에서 읽어 다시 RAM으로 불러오는 과정입니다. 이때 발생하는 지연 시간을 Page Fault라고 합니다.
3. 커널은 언제 스왑을 사용할까? (Swappiness)
리눅스 커널은 무조건 RAM이 꽉 차야만 스왑을 쓰는 것이 아닙니다. 이를 조절하는 설정값이 바로 swappiness입니다.
- 설정 범위: 0 ~ 100 (기본값은 보통 60)
- 0에 가까울수록: 커널이 최대한 스왑을 피하고 RAM을 사용하려 합니다.
- 100에 가까울수록: 커널이 적극적으로 스왑을 활용하여 파일 캐시 공간을 확보하려 합니다.
Tip: 성능이 중요한 데이터베이스 서버 등은 swappiness를 낮게(예: 10 이하) 설정하는 것이 일반적입니다.
4. 스왑의 두 가지 형태
리눅스에서는 스왑 영역을 두 가지 방식으로 설정할 수 있습니다.
| 구분 | 스왑 파티션 (Swap Partition) | 스왑 파일 (Swap File) |
| 특징 | 디스크의 별도 구역을 스왑 전용으로 할당 | 일반 파일 시스템 내에 생성된 파일 |
| 장점 | 속도가 약간 더 빠르고 구조가 단순함 | 용량 조절 및 생성이 유연함 (최신 권장) |
| 단점 | 한 번 설정하면 크기 변경이 어려움 | 파일 시스템 오버헤드가 발생할 수 있음 |
5. 스왑 상태 확인 및 관리 명령어
터미널에서 현재 시스템의 스왑 상태를 확인하는 방법입니다.
# 1. 스왑 사용량 간단히 보기
free -m
# 2. 스왑 상세 정보 보기
swapon --show
# 3. swappiness 설정값 확인
cat /proc/sys/vm/swappiness
마무리하며
스왑은 시스템의 생명 연장을 위한 필수 요소이지만, 과도한 스왑 발생(Thrashing)은 서버 성능 저하의 주범이 됩니다.
따라서 적절한 swappiness 설정과 모니터링을 통해 최적의 상태를 유지하는 것이 중요합니다.
'IT관련' 카테고리의 다른 글
| [SSMS 팁] 시작 시 '서버에 연결' 창 안 뜨게 설정하는 방법 (0) | 2026.02.03 |
|---|---|
| Apache Tomcat 설정값 정리 (0) | 2026.01.30 |
| 🔍 Tomcat의 maxPostSize 체크 메카니즘 (0) | 2026.01.30 |
| Apache Tomcat server.xml에서 maxPostSize와 maxParameterCount 설정하기 (0) | 2026.01.29 |
| [JavaScript] 배열 마스터의 필수 관문, splice() 함수 완벽 정리 (0) | 2026.01.28 |