리눅스

[리눅스] 서버 메모리 확장하기(+Swap)

삼록이 2026. 1. 12. 11:56

메모리란?

메모리란?

현재 실행중인 프로그램이 사용하도록 OS가 제공하는 공간이다.

그리고 메모리의 주 작업 공간은 RAM(Random Access Memory)이다.

(*RAM을 간단하게 메모리라고도 부르지만 여기서는 그 개념을 분할하여 사용하고자 한다.)

리눅스에서 현재 시스템의 메모리 상태를 요약해서 보여주는 명령어는 free -h다.

free -h

그러면 아래와 같은 상태를 확인할 수 있다.

(Swap설정을 아직 하지 않았다면 0으로 표기된다)

              total        used        free      shared  buff/cache   available
Mem:           3.8Gi       2.9Gi       120Mi       24Mi       780Mi       620Mi
Swap:          2.0Gi       0.0Gi       2.0Gi

 

total을 보면 시스템에서 사용할 수 있는 총 메모리 크기가 표시된다.

이 값은 물리적인 RAM 용량을 기준으로 하며, 실제로 이 크기를 늘리려면 RAM을 추가하는 수 밖에 없다.

하지만 서버,클라우드 환경에서는 물리적인 RAM을 즉시 확장하기 어려운 경우가 많다.

이런 상황에서 메모리 부족으로 인한 시스템 오류를 방지하기 위해 등장한 개념이 바로 Swap이다.

 


 

Swap이란?

Swap은 RAM이 부족할 때, 사용 빈도가 낮은 메모리 데이터를 디스크로 옮겨 RAM 공간을 확보하는 메커니즘이다.

즉 Swap으로 인해 메모리 부족으로 인한 즉시 프로그램이 종료되는 것을 막아 안정성을 확보할 수 있다는 것이다.

 


 

Swap의 동작 원리는 아래와 같다.

 

① 새로운 프로세스가 실행되어, 프로그램이 메모리 사용을 요청한다.

② OS가 RAM 에 여유공간을 확인한다. 그런데 여유공간이 없다.

③ OS가 RAM에 있는 최근 사용 빈도가 낮은 데이터를 확인한다.  이 데이터를 RAM에서 제거하고 디스크로 보낸다. 이를 swap out이라 부른다.

④ RAM에서 여유공간을 확보한 OS는 메모리 요청을 수용할 수 있게 된다.

⑤  swap out된 데이터는 다시 필요해질 때 RAM으로 돌아오게 된다.(이때 돌아오는 것을 swap in이라한다. 이때 마찬 가지로 RAM에 여유 공간이 없다면 다른 데이터가 swap out될 것이다)

 

*다만 이렇게 swap이 일어날수록 시스템은 RAM이 아니라 디스크까지 가게 될 것이고 단순 RAM만 사용했을 때보다 속도는 느려지게 된다.

  • RAM 접근 : 나노초
  • 디스크 접슨 : 마이크로초~밀리초

 

Swap은 성능을 향상시키기보다는 메모리 부족으로 프로그램이 죽지 않게 도와주는 안정성을 높이는 효과를 준다.

다만 이로 인해 속도와 같은 성능은 떨어진다.

그러므로 이 Swap설정을 하면 메모리가 확장되므로 무조건 해야하네로 단순 접근해서는 안된다.

본인도 깃랩만 돌리는 깃랩 전용 서버가 있는데 거기에 대해서는 성능보다는 서버가 죽지 않는 안정성이 중요하다고 판단되어 Swap설정을 한 것이다.

 


 

Swap 설정 방법

그러면 서버가 이런 Swap을 허용하도록 설정해보자.

 

1.아래 명령어로 Swap으로 사용할 '빈 파일 공간'을 디스크에 미리 확보한다.

sudo fallocate -l 4G /swapfile

fallocate는 파일을 실제로 그 크기만큼 디스크에 할당하는 명령어다.

-l 4G를 통해 파일크기를 4GB로 지정한 것이다. /swapfile은 생성될 파일경로 이고 관례적으로 루트(/) 아래에 둔다.

이로 인해 디스크에 4GB짜리 공간이 실제로 확보된 것이다.

 

2.Swapfile에 대한 접근 권한을 OS만 가능하게 제한한다.

sudo chmod 600 /swapfile

rw------- 권한을 주어 소유자(root)만 읽기와 쓰기를 가능하게 했다.

리눅스는 Swap파일에 대한 권한이 느슨하면 Swap활성화를 아예 거부한다고 하니 필수다.

 

3.swapfile에 대해 Swap 전용 파일이라 선언한다.

sudo mkswap /swapfile

 

4.OS에게 이 Swap을 지금부터 사용하라고 지시한다.

sudo swapon /swapfile

 

4가지 절차를 다시 정리하자면 아래와 같다.

  • fallocate → 디스크에 공간 확보
  • chmod      → 보안 잠금 (필수)
  • mkswap     → Swap 형식으로 포맷
  • swapon     → 커널에 등록 & 활성화

시스템 부팅시 계속 Swap설정 활성화

그리고 추가적으로 아래 명령어로 파일을 열어

sudo nano /etc/fstab

맨 아래에 swapfile none swap sw 0 0 라고 추가한다.

 

 

/etc/fstab은 시스템 부팅 시 어떤 디스크/파일을 어떻게 자동으로 사용할 지 적어두는 설정 파일이다.

 

/etc/fstab에 swapfile 설정을 추가하는 이유는 시스템이 재부팅되더라도 swap 설정이 사라지지 않게 하기 위해서다.

리눅스에서 swapon /swapfile 명령은 즉시 swap을 활성화하지만,이 설정은 현재 실행 중인 세션에만 유효하다.
즉, 서버를 재부팅하면 다시 swap이 꺼진 상태로 돌아간다.

그래서 /etc/fstab에 swap 정보를 등록해두면, 시스템이 부팅될 때 커널이 이 파일을 읽고
“이 파일을 swap 영역으로 사용하라”고 자동으로 처리하게 된다.