1. 배경
AWS EC2에 서버를 구동하고 대용량의 이미지를 처리하는 기능을 사용하자 CPU 사용량이 급격히 늘어나며 서버가 죽어버렸습니다.
다시 ssh 접속을 해봐도 timeout..
매번 인스턴스를 껐다 킬수도 없는 노릇이고 가난한 개발자는 비싼 요금제를 사용하기도 힘들기에.. Swap 메모리를 통해 문제를 해결해보았습니다.
ec2 스펙
- OS: Amazon Linux
- 인스턴스 유형: t2.micro (1 GiB 메모리)
- 용량: 8 GiB
2. Swap 메모리란?
Swap 메모리란 실제 메모리보다 많은 메모리가 필요할 때 하드디스크를 이용하여 부족한 메모리를 대체할 수 있는 공간입니다.
실제 디스크를 메모리처럼 사용하는 개념이기 때문에 가상 메모리라고 할 수 있습니다. 그리고 그만큼 속도는 현저히 떨어집니다.
3. 해결
1) 메모리 및 Swap 메모리 확인
$ sudo free -h
total used free shared buff/cache available
Mem: 949Mi 362Mi 141Mi 2.0Mi 444Mi 439Mi
Swap: 0B 0B 0B
당연하게도 Swap 메모리가 0입니다.
2) 루트 파일 시스템에 스왑 파일 생성
$ sudo dd if=/dev/zero of=/swapfile bs=128M count=32
32+0 records in
32+0 records out
4294967296 bytes (4.3 GB, 4.0 GiB) copied, 65.3027 s, 65.8 MB/s
여기서 스왑 파일은 4GB (128MB * 32) 입니다.
지정한 블록 크기는 인스턴스에서 사용 가능한 메모리보다 작아야 합니다. 아니면 "dd: error writing '/swapfile': No space left on device"와 같은 에러가 발생합니다.
3) 스왑 파일의 읽기 및 쓰기 권한 업데이트
$ sudo chmod 600 /swapfile
4) Linux 스왑 영역 설정
$ sudo mkswap /swapfile
5) Swap 메모리 활성화
$ sudo swapon /swapfile
6) 메모리 및 Swap 메모리 확인
$ sudo free -h
total used free shared buff/cache available
Mem: 949Mi 340Mi 178Mi 2.0Mi 430Mi 458Mi
Swap: 4.0Gi 0B 4.0Gi
Swap 메모리가 정상적으로 활성화 되었습니다.
7) 시스템 재시작 시 Swap 메모리 자동 활성화
$ sudo vi /etc/fstab
편집기에서 파일을 열고
/swapfile swap swap defaults 0 0
파일 끝에 위 줄을 추가하고 저장해줍니다.
* Swap 메모리 비활성화
$ sudo swapoff /swapfile