[AWS] Swap File을 이용해 EC2 메모리 부족 현상을 해결해보자
작업을 하던 중 AWS EC2 메모리 부족현상이 발생했다.
우리가 사용하고 있는 t4g.micro 인스턴스 유형은 램이 1GB였고, 이는 메모리 부족현상을 충분히(?) 볼 수 있을 정도로 작은 양의 메모리였다.
프리티어의 가장 큰 단점은 RAM이 1G 라는 것인데 그게 뭔 상관일까?
RAM은 실행중인 프로그램의 속도와 실행에 관련이 있다.만약 프로그램이 잡아먹는 RAM이 컴퓨터(우분투환경)의 RAM 크기를 초과해버린다면 프로그램이 느려지거나, 실행이 안될 수 있다.
이러한 현상을 어떻게 해결할까 고민하다가 swap file을 이용한 swap memory 할당이라는 방법을 알게 됐다!
스왑 파일을 이용한 스왑 공간 할당
EC2 램 메모리가 가득 찼기 때문에 실제 디스크의 용량을 이용하여 부족한 메모리를 대체할 공간을 swap memory(스왑 공간)이라 한다. 이번 포스팅에서는 linux에서 swap file을 생성하여 스왑 메모리를 할당하는 방법을 기록할 것이다.
보통 swap memory는 할당된 램 메모리의 2배 또는 그 이상을 추천하고 있다. 내가 사용하는 t4g.micro 인스턴스는 램이 1GB라는 귀여운 용량이므로 swap memory는 2GB 정도로 할당할 것이다. 왜 훨씬 더 큰 용량이 4GB나 8GB로 하지 않고 2GB로 하냐 묻는다면, 그 외에 추가로 축적될 파일들의 용량(로그 파일들이 기록된다든지 등등) 도 고려해야 되기 때문이다.
또한, swap 메모리는 완전히 RAM을 대체하는 것이라 보기 어렵다. 실제 디스크 용량을 할당하여 RAM을 대체하는 것이기 때문에 RAM으로 접근하는 것보다 현저히 속도가 느리기 때문이다.
방법
0. 스왑 메모리를 할당할 AWS EC2에 접속한다.
1. Swap 파일 메모리를 할당한다.
dd 명령어는 파일 복사 및 변환 관련 유닉스 명령 유틸리티라 한다.
/dev/zero는 데이터 스토리지 초기화 관련 파일이라 한다.
bs=128M* count=16으로 총 2GB로 swapfile 크기를 설정해주었다.
2. swapfile에 접근할 수 있는 권한을 설정한다.
읽기,쓰기가 가능하도록 chmod 600으로 설정해준다.
3. mkswap 명령어로 swapfile을 추가할 swap 공간을 생성한다.
mkswap은 Make swap의 약자이다.
4. swapon 명령어를 통해 swapfile을 swap memory에 추가한다.
5. ./etc/fstab에 세팅
etc/tstab는 파일시스템 정보를 저장하는 곳이다. 파티션 변경 및 디스크 추가 시에는 이 파일에 등록해야 자동으로 마운트가 가능하다.
따라서 /etc/fstab 파일에 swapfile을 세팅해주도록 하자.
/etc/fstab 파일에 대한 설명이 궁금하다면 아래 블로그를 참고하자.
https://meongj-devlog.tistory.com/134
6. free 명령어로 ec2 메모리 상태를 확인 하자.
swap 메모리 할당 전후 비교
Linux의 top 명령어로 현재 cpu, 메모리 할당량을 프로세스 별로 확인할 수 있다. top이라고만 입력해주면 된다.
여기서 shift + p를 누르면 메모리를 많이 잡아먹는 순으로 프로세스를 보여준다.
- top : cpu, 메모리 할당량을 프로세스 별로 확인할 수 있게 하는 명령어
- shift + p : 메모리를 많이 사용하는 순으로 정렬해주는 명령어
MiB Swap 메모리를 아예 사용하지 않고, 용량이 얼마 안남은 모습을 볼 수 있다.
RAM 사용량이 27MB 정도 남았는데, 여기서 더 사용하면 메모리가 터져 특정 프로세스를 실행하지 못할 확률이 높다.
램 사용량이 30~50MB 정도 남게 되면 SWAP 메모리를 사용하는 모습을 확인할 수 있다. 약 1.5GB를 끄떡없이 사용하는 모습을 확인할 수 있다.
참고
- https://kth990303.tistory.com/361
- https://aws.amazon.com/ko/premiumsupport/knowledge-center/ec2-memory-swap-file/
- https://ko.wikipedia.org/wiki/Dd_(%EC%9C%A0%EB%8B%89%EC%8A%A4)
- https://nearhome.tistory.com/64
- https://ko.wikipedia.org/wiki//dev/zero
- https://meongj-devlog.tistory.com/134