우당탕탕

[Linux/Ubuntu] 리눅스/우분투 스왑 파일(Swapfile) 생성 본문

Linux

[Linux/Ubuntu] 리눅스/우분투 스왑 파일(Swapfile) 생성

모찌모찝 2022. 9. 3. 07:00
스왑 파일 생성


이번 포스팅은 AWS EC2 프리티어에서 메모리 부족 현상을 해결하는 방법에 대해 적어보려 한다.
SpringBoot 프로젝트를 만들어서 EC2에 젠킨스를 배포 자동화를 시도할 때 EC2가 멈추는 현상을 발견하였고 가끔 젠킨스를 통하지 않고 그냥 적어도 멈추는 현상이 발견했었다.
( EC2의 프리티어 메모리는 1GB )

스왑 파일(Swapfile)

메모리를 늘리는 방법 중 제일 쉬운 방법은 돈을 내고 더 좋은 서버를 쓰면 된다. ( 우린 돈이 없으니 다른 걸 찾아보자 )
리눅스에서는 스와핑(Swapping)이라는 게 존재하는데 이는 하드디스크를 가상 메모리로 전환시켜 사용하는 방식이다.

AWS에서는 스왑 공간 크기 계산을 아래와 같이 권장한다

출처 : AWS ec2-memory-partition-hard-drive

최대 2GB의 RAM에 대해 스왑 공간은 RAM의 2배와 동일하게 하는게 가장 좋다고 써있다. 또한 스왑 공간은 32MB보다 작지 않은 것이 가장 좋다고 적혀있다.

이제 스왑 파일을 사용하는 이유에 대해 알았으니 사용방법에 대해 알아보자

첫 번째로 스왑 파일 생성전 현재 스왑 파일이나 파티션이 존재하는지 확인해야 한다.
아래 두 명령어를 한 줄씩 실행시켜 swap이라는 단어가 들어간 내용이 보이는지 확인한다.

sudo free -m
sudo swapon -s

만약 없다면 이제 스왑 파일을 생성할 차례이다.

스왑파일 생성

dd 명령을 사용하여 루트 파일 시스템에 스왑 파일을 생성한다. 
프리티어 기준으로 스왑 파일을 생성하는 코드이니 상황에 맞게 스왑 파일 용량을 정해야 한다.
아래 코드의 기준은 프리티어 1GB 기준이며 생성하는 스왑 파일은 2GB(128MB x 16)이다.

1. 아래의 명령을 통해 128MB x 16의 스왑 파일을 생성한다.

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


위의 명령을 한번 살펴보면 명령에서 bs는 블록 크기이고 count는 블록 수이다. 스왑 파일의 크기는 위에서 설명한 것처럼 블록 크기 x 블록 수이다.
지정한 블록 크기는 인스턴스에서 사용 가능한 메모리보다 작아야 하며, 만약 클 경우 "memory exhausted" 오류가 발생한다.

2.  스왑 파일에 대한 읽기/쓰기 권한을 업데이트해야 한다.
아래의 명령을 통해 업데이트해주자

sudo chmod 600 /swapfile

위의 명령을 설명하면 chmod [파일 권한] [파일 이름]으로 사용하며, chmod는 파일들이나 디렉터리의 파일 시스템 모드들을 바꾼다.

3. 아래의 명령을 통해 스왑 영역을 설정한다.

sudo mkswap /swapfile

4. 아래의 명령을 통해 스왑 파일을 추가하여 스왑 파일을 즉시 사용할 수 있도록 한다.

sudo swapon /swapfile

5. 아래의 명령을 통해 위의 절차들이 성공했는지 확인한다

sudo swapon -s

6-1.  부팅 시 스왑 파일을 자동 실행하도록 설정을 바꿔야 하는데, 아래의 vi명령을 통해 편집기에서 해당 파일을 연다.

sudo vi /etc/fstab

6-2. 파일 마지막에 아래 코드를 추가하고 파일을 저장한 뒤 종료한다.

/swapfile swap swap defaults 0 0

*참고 : vi 편집기에서 저장하고 나오는 방법은 esc를 누른 뒤 :wq이다. 안나와지면 :wq! 

여기까지 완료하면 이제 스왑 파일이 생성된 것을 볼 수 있다.
이 상태에서 테스트해보면 이제 EC2 멈춤 현상도 발생하지 않고 개인 사이드 프로젝트 정도는 무난하게 사용할 수 있다. 

 

 

'Linux' 카테고리의 다른 글

[Linux] 서버 장애 요인파악 순서  (0) 2022.09.06
Comments