본문 바로가기
서버 인프라, 백엔드/리눅스 (Ubuntu)

리눅스 : Swap 메모리란?

by 번데기 개발자 2022. 5. 3.
반응형

EC2를 이용하여 리눅스 Shell에서 개발을 진행하던 중에, 서버의 용량을 확인하다가 Swap 메모리라는 공간을 확인하였습니다.

 

Swap 메모리는 어디서 많이 들어봤는데, 정확한 개념을 알고 싶고, 리눅스 내에서는 어떠한 역할을 하는지 알고 싶어서 한번 정리해보게 되었습니다.

 

Swap 메모리란?


 

스왑 메모리란, 실제 메모리 Ram이 가득 찼지만 더 많은 메모리가 필요할때 디스크 공간을 이용하여 부족한 메모리를 대체할 수 있는 공간을 의미합니다.

 

실제 디스크 공간을 메모리처럼 사용하는 개념이기 때문에 가상 메모리라고 할 수 있습니다.

 

속도면에서는 실제 메모리가 아닌 하드디스크를 이용하는 것이기 때문에 메모리 속도면에서는 현저히 떨어진다고 할 수 있습니다.

 

 

리눅스에서의 Swap 메모리


 

리눅스에서의 Swap 메모리도 앞서 설명한 것처럼 메모리 사용량이 늘어남에 따라 디스크 일부를 마치 확장한 RAM 처럼 사용하게 해 줍니다.

 

리눅스 커널은 실제 메모리에 올라와 있는 메모리 블록들 중 당장 쓰이지 않는 것을 디스크에 저장하고, 이를 통해 사용 가능한 메모리 영역을 늘립니다.

 

 

EC2에서의 Swap 메모리 (Swap 메모리를 사용하는 이유)


 

보통 EC2를 free tier로 사용하게 될 경우, t2.micro의 Ram이 1G밖에 되지 않아서, node나 spring만 띄우더라도 메모리가 부족하여 ssh접속도 되지 않는 경우가 있습니다.

 

이럴 때에도 임시로 Swap 메모리를 설정하게 되면, free tier의 EC2 메모리가 부족하더라고 Swap 메모리로 메꿔서, 여러 개의 프로세스를 동시에 띄울 수 있게 됩니다.

 

 

리눅스에서 Swap 메모리 확인하기


 

swapon -s 또는 free -h 명령어를 통해 Swap 메모리를 확인할 수 있습니다.

 

위에서는 EC2 인스턴스에서 free 명령어를 사용하여 Swap 메모리를 확인해 보았습니다.

 

일단 현재 EC2 인스턴스의 메모리를 살펴보면 전체 설치된 메모리(total)는 약 16G입니다.

 

total에서 buff/cache와 free를 뺀 메모리(used)는 약 317MB입니다. 즉 사용 중인 메모리를 의미합니다. 

 

total에서 used와 buff/cache를 뺀 실제 사용 가능한 메모리(free)는 약 10G입니다. 즉 사용 가능한 메모리를 의미합니다.

 

공유 메모리(Shard)는 약 0~1MB를 사용하고 있는데, 공유 메모리란 하나의 프로세스에서 다른 프로세스의 메모리를 사용하고 싶을 때 사용하는 메모리입니다.

 

공유 메모리 알아보기

 

리눅스 공유 메모리 - Voyager of Linux

리눅스 공유 메모리 는 아주 특별하고 중요합니다. 튜닝하는데 있어서 매우 중요한 요소이기 때문입니다. PostgreSQL 를 세팅할때에도 반드시 해줘야 하는 것이기에 정확하게 무엇인지 짚고 넘어

linux.systemv.pe.kr

버퍼와 캐시를 위해 사용하는 메모리(buff/cache)는 4.8G를 사용하고 있고, buff/cache 메모리는 보통 커널이 성능 향상을 위해 캐시 영역으로 사용되는 메모리를 의미합니다.  좀 더 살펴보면 buff는 프로세스가 사용하는 메모리 영역이 아닌 시스템 성능 향상을 위해 커널에서 사용하고 있는 영역이며, cache는 페이지 캐시라 불리는 캐시 영역에 있는 메모리를 의미하며 I/O 작업을 더 빠르게 진행하기 위해 커널에서 사용하고 있는 영역입니다.

 

리눅스의 buffer/cache 메모리 알아보기

 

리눅스 : 메모리 확인 / 캐시 삭제

리눅스의 캐시와 메모리 리눅스에서 free 명령어를 사용하다 보면 buffer/cache라는 것이 존재합니다. 이 부분은 직접 사용하고 있는 메모리가 아닌 버퍼와 캐시에 사용된 메모리를 말합니다. 버퍼

jw910911.tistory.com

 

swap 메모리의 사용 없이 새로운 프로세스에서 할당 가능한 메모리의 예상 크기(available) 약 15G입니다.

 

현재 할당된 Swap 메모리는 0입니다.

 

이제 Swap 메모리를 추가하는 명령어를 알아보겠습니다.

 

 

Swap 메모리 추가


 

현재 리눅스 커널에서 200M의 Swap 메모리를 설정해보도록 하겠습니다.

 

먼저 Swap 메모리를 Swap 파일로 포맷하여야 합니다.

# Swap 메모리를 Swap 파일로 포멧
sudo dd if=/dev/zero of=/swapfile bs=1024 count=200000

bs는 포맷의 단위라고 생각하시면 편합니다. 

 

즉 1024이므로 1KB를 의미하며 bs=1M 이런 식으로 사용하면 MB단위로도 사용이 가능합니다.

 

count는 횟수(블록수)를 의미합니다.

 

위에서는 1KB를 200000번 /dev/zero로 초기화하였기 때문에 총 200MB의 공간을 Swap 파일로 포맷한 것이라고 볼수 있습니다.

 

Swap 메모리를 Swap 파일로 포멧


 

mkswap 명령어를 사용하여 Swap 파일로 포맷할 수 있습니다.

sudo mkswap swapfile

 

Swap 메모리 활성화


 

mkswap 명령어를 사용하면 Swap 메모리를 활성화할 수 있습니다.

 

# 단일 Swap 메모리 on
sudo swapon swapfile

# 모든 Swap 메모리 on
swapon -a

 

Swap 메모리 비활성화 


 

swapoff 명령어를 사용하여 Swap 메모리를 비활성화할 수 있습니다.

# 단일 Swap 메모리 off
sudo swapoff swapfile

# 모든 Swap 메모리 off
swapon -a

 

Swap 메모리 삭제


 

폴더를 삭제하는 rm -r 명령어를 통해 Swap 메모리를 삭제할 수 있습니다.

sudo rm -r swapfile

 

Swap 메모리 시스템이 재시작되더라도 활성화


 

# 파일시스템 설정
sudo vi /etc/fstab 

# 맨 아래에 다음 라인 추가
...
...
# 마지막 행에 추가, 시스템이 재시작되더라도 활성화
/swapfile swap swap defaults 0 0

 

실제 커널에서 실습해보기


 

Swap 메모리 영역 추가

 

Swap 메모리를 Swap 파일로 포멧

 

Swap 메모리 활성화 / 비활성화

 

Swap 메모리 활성화 확인

 

참조


 

 

마무리


 

이상으로 리눅스 Swap 메모리에 대해 알아보았습니다.

 

리눅스 명령어 하나를 깊게 알아보면서 공부하다 보니, 몰랐던 배경지식도 덤으로 쌓이면서 리눅스라는 OS와 좀 더 친해지는 느낌이 드는 것 같습니다.

 

이후에도 리눅스 관련 포스팅은 계속 올릴 예정입니다.

 

감사합니다.

 

반응형