백엔드 서버를 t2.micro 프리티어에서 운영하고 있습니다.
t2.micro의 스펙은 1 vCPU, 1GiB RAM이고
서버에서는 nginx 도커 컨테이너 1개, spring 애플리케이션 컨테이너 1개를 운영하고 있습니다
개발하면서 서버가 불규칙적으로 다운되는 현상이 있었는데요,
nginx, docker를 이용한 블루그린 배포를 하고 있는데 그 과정도 버티지 못하고 응답없는 상태가 되는 일이 아주 많았습니다.
Swap 적용하기
이 문제를 해결해보기 위해 swap 메모리가 떠올랐습니다.
조금 찾아보니 ec2 상에 swap 메모리를 추가하는 것은 매우 쉬웠습니다.
AWS의 문서를 그대로 따라하면 가능했습니다.
스왑 파일을 사용하여 Amazon EC2 인스턴스의 스왑 공간으로 메모리 할당
Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 스왑 파일로 사용할 메모리를 할당하려고 합니다. 어떻게 해야 하나요?
repost.aws
스왑메모리를 적용하기전 메모리 사용량을 조회하면 그 차이를 명확히 확인할 수 있습니다.
free -h
스왑파일을 적용하기 전에는 기본적으로 스왑메모리가 0인 반면
스왑파일을 적용한 후에는 스왑 메모리가 늘어난 것을 확인할 수 있었습니다.
Swap 메모리의 크기
스왑 메모리는 일반적으로 물리적 메모리의 2배를 지정하며,
지금 프리티어에서 운영 중인 서비스의 경우에는 저장 용량을 거의 사용하지 않고 EBS가 30GB로 할당되어 있어 디스크 공간 넉넉하다고 생각해 2GB를 스왑메모리로 사용하여도 부족하지 않을 것이라고 생각해서 2GB를 설정했다.
위의 글에서 맨 처음 명령어만 다음과 같이 바꾸어 입력해주었습니다.
$ sudo dd if=/dev/zero of=/swapfile bs=128M count=16
스왑메모리는 '일반적으로' 물리메모리의 2배를 지정하지만 상황에 따라 다르게 적용하는 것이 필요하다고 합니다.
근무할 때 개발용 ubuntu pc의 메모리가 32GB였는데 아무것도 모르고 우분투 스왑 파티션을 64GB로 주어서 64GB를 낭비해 본 경험이 있습니다... CPU 집약적인 작업을 할 것인지, 현재 물리 메모리가 어느정도인지 등을 고려하면 어떨까요?
적용 전 후 비교
적용 후 며칠간 서버 모니터링을 해온 결과 CPU 사용률이 100%까지 올라가는 일은 발생하지 않았습니다!
아래 그래프는 최근 1주일간 CPU 사용률 그래프입니다.
최근 3일간의 기록을 보면 CPU 사용률이 낮게 기록되어있는 반면 그 이전의 기록들은 산발적으로 아주 높은 값을 기록하고 있는 것을 볼 수 있었습니다.
최근 3일간의 기록을 보면 조금 더 자세히 볼 수 있는데,
3월 6일에 딱 한 번 80%를 초과하고 그 이후에는 50%도 넘지 않는 모습입니다.
최근 12시간의 기록에서는 아예 y축 매트릭이 달랐습니다!
실제 운영에 들어가게 되면 서버 용량을 확장하는 것은 필수적이지만 개발단계에서 장애를 줄여볼 수 있는 경험이었습니다.
Swap 메모리의 힘은 대단했다
'Projects' 카테고리의 다른 글
pm2로 알림서버 배포하기 - 무중단배포 (0) | 2024.04.17 |
---|---|
게시글 추천 시스템 도입을 고려하며 조사한 내용 (0) | 2024.02.04 |
게시판 전체 글 랭킹 점수 데이터 업데이트 속도 77.72% 개선 (bulk update vs batch update) (1) | 2024.01.23 |
Querydsl을 이용한 커서 기반 페이지네이션 구현기 (0) | 2024.01.20 |
[코드실행기능 개발기 #3] 코드 실행 서버 부하테스트 (1) | 2023.12.17 |