EC2의 Swap 기능이란 ? 

EC2 인스턴스에 내 프로젝트를 빌드할때 실패를 경험함과 동시에 해결하기 위해 알게된 기능이다.

Swap은 일반적으로 메모리 부족 상황에서 시스템의 안정성을 유지하기 위해 사용되는 기능이다. 
물리적인 RAM이 부족할 때 사용되는 가상 메모리 공간을 의미한다.

가령 1초에 1의 일을 처리하는 RAM이 있을 때, 1초에 2의 일을 요구받으면 과부하가 발생할 수 있다. 이 때, RAM이 1초에 처리하는 일의 절반을 실제 디스크 공간 (HDD 또는 SSD)에 임시로 저장한 후, RAM이 이전 작업을 완료하면 해당 임시 데이터를 다시 불러와 처리함으로써, 느리지만 과부하 없이 작업을 완료할 수 있게 한다.

 

1. 권장 Swap 공간 확인하기

- 내가 사용하는 인스턴스 유형인

t2.micro는 RAM이 1GB이다.

그렇기에 권장 스왑 공간인 2GB까지만 늘려주도록 하자.

명령어 free로 실제 RAM의 크기를 확인할 수 있다. (980420KB)

 



2. swapfile 생성하기

 

sudo dd if=/dev/zero of=/swapfile bs=128M count=16

- 위 명령어 통해 swapfile 생성하기

  1. dd > [Data Duplicator] unix 계열 시스템에서 데이터를 복사하거나 변환하는 명령어
  2. if > [Input File] /dev/zero[각주:1] 지정
  3. of > [Output File] /swapfile 지정
  4. bs > [Block Size] swapfile의 크기 지정
  5. count > swapfile의 개수

풀어보자면 dd 명령어에 'if=/dev/zero' 옵션을 사용해 '/dev/zero' 장치에서 0으로 채워진 데이터를 읽어와 'of=swapfile' 옵션으로 지정한 파일에 해당 데이터를 복사한다. 이때 bs를 통해 적절한(내 프로젝트의 규모에 따라) swapfile의 크기를 지정해주고 count를 통해 swapfile로 지정한 Block의 개수를 지정해 총 사용량 용량을 맞춰준다. (지금은 2GB)

 

이렇게 생성된 Swapfile들이 RAM과 같은 역할을 해주게 되는 것.



3. swapfile 권한설정

사용 설정

- sudo chmod 600 /swapfile로 사용자의 읽기 권한 (Read): 숫자 4 + 쓰기 권한 (Write): 숫자 2 = 6을 지정해주자.

- sudo mkswap /swapfile 만들어둔 /swapfile을 swapfile의 영역으로 지정해주자.


4. 활성화 정보 확인

 

 

- sudo swapon -s를 입력해 내가 지정한 swapfile의 용량으로 설정됐는지 확인하자.


Swap 설정 완료 후 다시 build 해보기 !

2024.06.16 - [Java/배포해보자] - [배포 4] 프로젝트 build

 

[배포 4] 프로젝트 build

EC2 인스턴스에 프로젝트 build 방법 익히기build 하기 전에 EC2에 설치돼 있는 MySQL에 테이블과 필드 생성해놓기build 하기 전에 MySQL을 백그라운드에서 실행해놓기 (sudo systemctl start mysql)build 하기 전

subray.tistory.com

 


그렇다면 부족한 RAM을 Swap으로 해결하는 것이 항상 해답일 수 있을까 ?

 

Swap 공간은 RAM 보다 접근 속도가 느리기 때문에 실제 RAM 보다 성능이 떨어질 수 있어 실질적인 대안책은 아니다. 정교한 Swap 설정을 통해 메모리 부족으로 인한 시스템 다운을 방지하는 용도로 사용하는 것이 현명하다.

 

지금은 우리가 대규모 서버나 데이터베이스 서버를 운용하는 것이 목적이 아닌, 프로젝트 build를 성공해보는 것이 목적이기 때문에 사용했다. 추후 실제 서비스되는 프로그램에서의 사용은 조금 더 신중해야할 것 같다.
  1. Unix 및 Unix 계열 시스템에서 사용되는 가상 장치(Virtual Device) 중 하나이다. 이 장치는 데이터를 읽을 때마다 항상 0(제로) 바이트만 반환한다. [본문으로]

+ Recent posts