현재 프리티어를 사용해서 프로젝트를 진행중인데, EC2에서 자꾸 CPU 100%를 찍는 문제가 발생했었다.
이렇게 되면 서비스가 아예 죽거나, 상태검사에서 통과하지 못해 ssh 접속이 아예 안된다는 문제가 있었다.
문제를 해결하려 방법을 찾아보던중, SWAP 메모리를 추가해 메모리 공간을 추가해줄 수 있다는 블로그 글을 발견했다.
1. Swap 메모리?
Swap 메모리는 리눅스 시스템에서 물리적 메모리(RAM)가 부족할 때를 대비한 가상 메모리 공간이다.
따라서 RAM이 부족할 때 디스크에 데이터를 임시 저장하여, 시스템이 계속 동작할 수 있도록 도와주는 보조 메모리 공간이라고 할 수 있다.
스왑의 동작 원리는 다음과 같다.
- 사용 중인 RAM이 가득 차면,
- 리눅스 커널은 덜 자주 쓰이는 메모리 페이지를 디스크에 있는 스왑 영역으로 이동시켜,
- RAM 공간을 확보합니다.
- 다시 필요해지면 해당 데이터를 RAM으로 불러옵니다.
스왑 메모리공간을 사용하는 두 가지 방법이 있는데, 아래 실습은 '스왑 파일 형식'을 통해 스왑 메모리를 구현한다.
- 스왑 파티션: 디스크의 일부 파티션을 스왑 전용으로 사용
- 스왑 파일: 일반 파일 형태로 생성하여 스왑 공간처럼 사용 (현재 실습하는 방식)
하지만, 디스크는 RAM보다 훨씬 느리기 때문에, 스왑이 과도하게 사용되면 시스템이 심하게 느려질 수 있다. (이를 "스와핑 현상"이라고도 함)
따라서 고성능이 중요한 서버에서는 Swap 사용을 최소화하거나 비활성화하는 경우도 있으므로, 사용하는 서비스에 따라 판단하는게 좋다.
2. EC2 + Swap 실습
가장 먼저, 스왑 공간으로 사용할 스왑 파일을 생성해야한다.
일반적으로 RAM 용량의 1.5~2배 정도의 스왑 파일 크기가 권장되는데,
현재 free 명령어를 통해 확인한 RAM 공간은 약 1GB이므로 2GB의 스왑메모리 공간을 잡는다.
# 현재 메모리 공간 상태 확인
free
# 2GB의 스왑 파일 생성
dd if=/dev/zero of=/root/swapfile bs=1k count=2000000 conv=excl
생성한 스왑 파일의 권한을 부여해준다.
스왑 파일은 소유자만 읽기/쓰기가 가능해야하므로, 반드시 600 권한이여야 안전하다.
chmod 600 /root/swapfile
해당 파일을 스왑 영역으로 지정한다.
mkswap /root/swapfile
리눅스 시스템은 부팅 시, /etc/fstab 파일을 참조해서 마운트할 디스크/파티션/스왑 영역 등을 자동으로 설정한다.
따라서 /etc/fstab 공간에 스왑파일에 대한 내용을 추가해주어야, 시스템이 재부팅 되어도 스왑 공간을 계속 사용할 수 있다.
다음은 "/root/swapfile swap swap auto 0 0" 내용을 작성하는 2가지 방법으로, 둘 중 아무거나 해도 된다.
# 1. nano 이용
nano /etc/fstab
# 파일의 맨 아래에 다음 내용 추가
/root/swapfile swap swap auto 0 0
# 내용 작성 후 저장
Ctrl + O, Enter, Ctrl + X
# 2. echo 로 작성하기
echo '/root/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
정상적으로 스왑 공간에 대한 설정이 마무리 되었다면, 인스턴스 재부팅 후에 메모리를 확인해봤을 때
다음과 같이 늘어난 메모리 공간을 볼 수 있다.
AWS는 재밌다..
'AWS' 카테고리의 다른 글
[AWS][트러블슈팅] ALB의 Internet-facing vs Internal (0) | 2025.06.26 |
---|---|
Artillery 부하테스트 (0) | 2025.06.21 |
[AWS]기존 EC2로 AMI 이미지 만들고, AutoScaling 그룹에 ELB 연결하기 (0) | 2025.05.21 |
[AWS] 로드밸런서 유형과 구성요소 (0) | 2025.05.19 |
[AWS]Spring boot 프로젝트 EC2로 배포하기 (2) | 2025.05.16 |