Linux swap 메모리 생성하기 (Swap File 방식)

dev_joo·2025년 3월 22일
0
post-thumbnail


AWS EC2 프리티어 인스턴스 유형인 t2.micro는 위처럼 1GB의 메모리만을 지원하고 있기 때문에 Jenkins 등 서버에서 무거운 CI/CD 작업을 할 때 서버에 메모리가 부족해 Cannot allocate memory 문제가 생길 수 있다.

1. swap 메모리란?

👉 리눅스에서 RAM이 부족할 때 사용되는 가상의 메모리

리눅스는 물리적인 메모리(RAM)가 부족하면 일부 데이터를 디스크의 스왑 공간(Swap Space)으로 옮겨 활용할 수 있다.
이때, 스왑 공간은 디스크에 생성된 특수한 영역으로, RAM처럼 사용된다.

비교 항목RAMHDDSSD
저장 방식전기 신호자기 디스크(기계식)NAND 플래시 메모리(반도체)
속도 (읽기/쓰기)10~50GB/s100~200MB/s500MB~7GB/s (NVMe 기준)
지연 시간 (Latency)10~100ns (나노초)5~10ms (밀리초)50~100µs (마이크로초)
휘발성 여부휘발성비휘발성비휘발성

하지만 swap 메모리는 HDD/SSD를 사용해 CPU가 데이터를 읽어들일 때 SATA, NVMe 같은 버스를 거쳐야 하기 때문에 cache를 사용하며 CPU와 직접 연결된 RAM 메모리보단 상대적으로 성능이 떨어진다.


2. Swap Partition vs Swap File 비교

리눅스에서 스왑을 만들 때, 전용 파티션(Swap Partition)을 만들어 swap메모리를 사용하는 방법과
파일을 사용해서 스왑(Swap File)을 설정하는 방법이 있다.

항목Swap PartitionSwap File
설정 방식별도의 디스크 파티션을 생성해야 함일반 파일을 생성하여 사용
유연성크기 변경이 어려움 (파티션 변경 필요)필요할 때 추가/삭제 가능
설정 복잡도초기 설정이 필요 (디스크 재구성)간단한 명령어로 생성 가능
성능파일보다 약간 빠름 (고정된 영역 사용)일반적으로 충분히 빠름 (커널 최적화)
가상 머신 환경파티션 추가가 어려움손쉽게 설정 가능
SSD 수명 영향일정 영역을 계속 사용필요할 때만 사용 가능

3. 현재는 Swap File이 더 선호된다

두 가지 방법 중 EC2 인스턴스의 swap 메모리를 만들 때는 주로 Swap File을 사용하는데, 그 이유는 다음과 같다.

✅ 1) 복잡한 과정 없이 유연하게 Swap 공간을 쉽게 추가 가능

기존에 swap 메모리를 만든 이후 메모리가 부족한 경우, 새롭게 스왑 파일을 만들어 추가할 수 있다.

스왑 파티션은 디스크 공간을 고정적으로 할당하기 때문에, 나중에 파티션을 수정하려면 디스크를 재구성하는 복잡한 과정이 필요 하지만, 스왑 파일은 그냥 파일을 생성하고 추가하면 되므로 훨씬 유연하다.

✅ 2) 가상화 및 클라우드 환경에서 유리

가상 머신(VM) 또는 클라우드 환경(AWS, Azure, GCP)에서는 스왑 파티션을 설정하기 어려운 경우가 많다.

스왑 파일을 사용하면 시스템 운영 중에도 스왑 공간을 조정할 수 있어 유동적인 관리가 가능하다.

✅3) 파일 시스템과 하드웨어의 발전

과거 리눅스에서는
초기 리눅스 파일 시스템(ext2, ext3 등)은 랜덤 읽기/쓰기 속도가 느렸고,
HDD를 주로 사용했기 때문에 파일 시스템 오버헤드 문제, 디스크 단편화 문제가 있었고
리눅스 커널이 스왑 파일을 효과적으로 관리하는 기능이 부족해 스왑 파일보다 스왑 파티션이 성능과 안정성 면에서 선호되었지만,

현재는
최신 파일 시스템(ext4, XFS, Btrfs 등)의 성능 개선되었고
SSD 사용, 리눅스 커널(3.x, 4.x, 5.x 이후)에서는 커널이 스왑 파일을 직접 관리하며 단편화 문제 부담이 적어졌으며

디스크의 특정 블록만 반복적으로 쓰게 되는 파티션 방식의 불균형 마모 문제 개선과 TRIM과 호환이 잘 되어 SSD 수명 관리 관점에서도 스왑 파일 방식이 선호되고 있다.


3. (디스크)파일을 메모리로 사용할 수 있는 이유

1️⃣ 리눅스는 가상 메모리(Virtual Memory)를 사용하며, 메모리를 페이지(Page) 단위로 관리한다

리눅스 커널은 메모리를 4KB 같은 작은 단위(페이지)로 쪼개어 관리한다.
즉, 일부 페이지는 RAM에 있고, 일부 페이지는 스왑 공간(디스크)에 저장할 수 있다.
메모리가 부족하면, 사용하지 않는 페이지를 디스크로 옮겨 스왑 공간에 저장해두고 나중에 해당 페이지가 필요할 때 RAM으로 불러와 사용한다.

2️⃣ 커널이 직접 스왑 파일을 디스크 블록으로써 관리한다

블록 디바이스(Block Device)는 기본적으로 디스크의 저장 단위이며 물리적 공간이다.
Swap Partition은 특정 블록 디바이스를 직접 사용한다.

Swap File은 mkswap 명령으로 스왑 공간으로 변환하는 과정에서 스왑 파일이 저장된 디스크 블록 정보가 커널에 등록된다.
등록된 스왑 파일은 커널이 직접 해당 디스크 블록을 관리하기 때문에 (파일 시스템을 거쳐야 하는) 일반 파일과 달리 빠르게 접근하게 되어 블록 디바이스 처럼 처리된다.


4. Swap File 만들고 메모리로 추가하기

1. 2GB 크기의 스왑 파일 생성

sudo dd if=/dev/zero of=/swapfile bs=1M count=2048

2. 파일 권한 설정 (보안상 root만 접근 가능하도록 설정)

sudo chmod 600 /swapfile

600 (rw- --- ---)

3. 스왑 영역으로 포맷

sudo mkswap /swapfile

4. 스왑 활성화

sudo swapon /swapfile

5. 재부팅 후에도 스왑이 유지되도록 /etc/fstab 파일에 추가

echo "/swapfile none swap sw 0 0" | sudo tee -a /etc/fstab

5. Swap File 관리

등록된 swap파일 목록 출력

swapon -s

리눅스 os 메모리 확인하기

free -h

swap 활성화 해제

swapoff /swapfile
# 현재 사용 중인 메모리가 부족하여 swap을 비활성화할 수 없을 때
# swapoff failed: Cannot allocate memory 오류가 발생할 수 있음
# 해결 : 새로운 SwapFile을 추가 한 뒤 해제

6. + Swap File 우선순위 (Priority) 설정 방법

리눅스에서는 여러 개의 Swap File 또는 swap 파티션을 사용할 때,
우선순위(Priority)를 설정하여 특정 swap 공간을 먼저 사용하도록 할 수 있다.
우선순위가 높은 swap 공간이 먼저 사용되며, 그 공간이 가득 차면 우선순위가 낮은 swap으로 넘어간다.

sudo swapon -p 10 /swapfile1  # /swapfile1의 우선순위를 10으로 설정
sudo swapon -p 5 /swapfile2   # /swapfile2의 우선순위를 5로 설정
profile
풀스택 연습생. 끈기있는 삽질로 무대에서 화려하게 데뷔할 예정 ❤️🔥

0개의 댓글