1 minute read

Intro.

AWS RDS 에서 EC2 Ubuntu 서버에 MySQL을 직접 설치해서 사용한 이후 서버가 일정시간 후 지속적으로 다운되는 현상을 겪었습니다.

  • 배포 자동화 시 Docker 컨테이너와 Image 중첩 문제는 스크립트 추가로 해결하였지만 문제가 다시 발생했습니다.
  • 모니터링 결과
    • Client_loop: send disconnect: Broken pipe 에러 확인
    • 아래 그래프 상에도 일정 시간마다 터지는 사용률을 확인했습니다.

cpu-monitoring2.png

  • $ top 명령어로 Ubuntu 서버 상태 체크

ec2-monitoring.png

  • 메모리 사용률이 965.7, 약 95.6% 가량 사용중인 것을 확인했습니다.
    • AWS EC2 서버 상황이나 트래픽에 따라 broken pipe 가 발생할 수 있는 사용률이라고 판단됩니다.

AWS EC2 에러 (Broken Pipe)

AWS 공식 홈페이지에서는 SWAP 메모리를 사용할 것을 추천합니다.

https://aws.amazon.com/ko/premiumsupport/knowledge-center/ec2-memory-swap-file/

  • 아래의 스텝으로 SWAP 메모리 사용 설정을 해주었습니다.
# Swap 메모리 할당
sudo dd if=/dev/zero of=/swapfile bs=128M count=16
# 읽기, 쓰기 권한 부여
sudo chmod 600 /swapfile
# Linux 스왑 영역 설정
sudo mkswap /swapfile
# 스왑 공간에 파일을 추가해서 즉시 사용
sudo swapon /swapfile
# 프리시저가 성공적인지 확인
sudo swapon -s
# /etc/fstab 파일을 편집해서 부팅 시 스왑 파일 시작
# vi 에서 파일 열기
sudo vi /etc/fstab
# 파일 끝에 다음 명령어 추가
/swapfile swap swap defaults 0 0
  • $ top 명령어로 확인한 결과

swap-memory.png

  • 추가된 2GB의 SWAP 메모리를 확인할 수 있습니다.

SWAP 메모리?

SWAP 메모리란 RAM이 부족할 경우 HDD의 일정공간을 마치 RAM처럼 사용하는 것입니다.

스왑 공간 크기 계산

RAM 2GB 이하 - RAM 용량의 2배 (프리티어 해당)

RAM 2GB 초과, 32 GB 미만 - 4GB + (RAM - 2GB)

RAM 32GB 이상 - RAM 용량의 1배

단점 & 장점

  • HDD 에 할당하기 때문에 속도가 매우 느리다.
  • 하지만, 서버가 완전히 다운되는 것을 방지할 수 있다.

Summary.

  • 프리티어의 t2.micro 램이 1GB 밖에 안되서 발생하는 문제입니다.
  • 이 에러의 가장 근본적인 해결책은 서버 인스턴스 유형을 바꿔서 스케일 업 하는 것이라고 생각합니다.
    • 하지만, 사이드 프로젝트의 제한된 비용을 고려하면 SWAP메모리를 사용하는 것도 좋은 선택지입니다.
  • 추가로 프로젝트 간 Prometheus, Grafana 와 같은 서버 모니터링 및 시각화 도구를 사용해서 서버 상태를 모니터링해보고 싶은 생각이 들었습니다.

Leave a comment