1 분 소요

문제 상황

AWS EC2에 Spring Boot 서버를 배포하고 하루를 채 버티지 못하고 죽었다.
인스턴스 중지 후 재기동하면 다시 살아나지만 살아나고 나서도 오래 버티지 못하고 또다시 죽는 현상이 반복되었다.

AWS EC2 스팩

  • 서버: AWS EC2
  • 위치: Asia Pacific (Seoul)
  • 사양: t2.micro (Free Tier)
  • 용량: 16GB (Free Tier)
  • OS: Ubuntu

문제 원인

이 글이 글을 참고했다.

결론부터 말하자면,
해당 InstaceFail 과 관련된 알람은 CPU 사용량이 100%에 근접하게 사용됨으로써 부하가 발생, 인스턴스가 제 역할을 하지 못하는 상태가 된 것이라고 볼 수 있다.

아래에 그림은 Cloud watch를 이용해 CPU 사용량에 대한 지표이다.
스크린샷 2023-08-07 오후 1 50 00
지표를 자세히 보면 중간 중간 CPU 사용량이 100 퍼센트에 근접하게 치솟는 순간이 있는데 이때가 서버가 죽었을 때의 순간이었다.

원인은 크게 4가지로 다양했다.

  1. 매우 낮은 스팩의 메모리를 가진 경우(t2.nano와 같은 경우) 또는 자신이 사용하는 애플리케이션의 메모리가 가진 스팩보다 높은 경우
  2. 누군가가 나의 EC2를 해킹하여 사용하는 경우
  3. AWS EC2 인스턴스의 크레딧을 전부 사용한 경우
  4. AWS EC2 인스턴스의 하드웨어의 문제

해결 방법 - Swap 파일 생성

Swap 파일의 생성은 RAM이 부족할 경우가 있으므로 HDD의 일정공간을 마치 RAM처럼 사용하는 것이다.
그래서 우리는 반 강제적으로 RAM을 증설한 듯한 효과를 만들수 있다.

# swap 확인
$ free -m

# Swap으로 사용할 디스크를 할당
$ sudo fallocate -l 4G /swapfile

# 파일 권한은 root로 제한
$ sudo chmod 600 /swapfile

$ ls -al /swapfile

# Swap file로 설정
$ sudo mkswap /swapfile

# Swap file을 시스템이 사용할 수 있도록 활성화
$ sudo swapon /swapfile

# 바로 위 커맨드에서 Invalid argument 에러가 발생하면 아래 3줄을 순서대로 실행 (아니면 3줄 넘어가기)
# $ dd if=/dev/zero of=/swapfile bs=1M count=4096
# $ sudo mkswap /swapfile
# $ sudo swapon /swapfile

# Swap 파일의 UUID 확인
$ blkid /swapfile

$ sudo vi /etc/fstab
# 하단에 추가: UUID=cfa3658f-65b7-48ec-ba27-dd22e7277bda swap swap defaults 0 0

# OOM(Out of Memery) 가 발생할 때만, Swap File을 사용하도록 설정
$ sudo vi /etc/sysctl.conf
# vm.swappiness를 0으로 설정: vm.swappiness=0

# 제대로 Swap file이 생성되었는지 확인
$ free -m


💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기