EC2 내에서 Swap Memory 사용

석형원·2024년 8월 25일

project

목록 보기
4/11

EC2 내에서 Airflow 시스템을 구축하여 동작을 확인하던 도중,
dags 디렉토리에 DAG 파일들을 올리자 EC2 인스턴스가 shut down되는 상황이 발생했습니다.

-> Docker Container들이 차지하는 리소스로 인해 t3.medium의 최대 메모리 3.8GB에 도달한 것으로 추정

메모리 모니터링 - Cloudwatch Agent

먼저, 원인이 메모리 부족인지 확인하기 위해 메모리 사용량에 대한 모니터링을 시도해보겠습니다.

기본적으로 제공되는 Cloudwatch는 메모리 사용량을 제공하지 않기 때문에 EC2에 CloudWatch Agent 설치하여 더 다양한 지표를 수집해보겠습니다.

  • 정책 부여

    대상이 되는 EC2 인스턴스에 CloudWatchAgentServerPolicy 정책을 부여해줘야합니다.

  • Cloudwatch Agent 설치
    (참조 : 공식문서)

    # 설치
    wget https://amazoncloudwatch-agent.s3.amazonaws.com/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
    sudo dpkg -i -E ./amazon-cloudwatch-agent.deb
    
    sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
    
    # Cloudwatch Agent 실행
    sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s
    
    # 동작 확인
    sudo amazon-cloudwatch-agent-ctl -m ec2 -a status

부족한 메모리 보완 - Swap Memory

지속적으로 메모리 대부분이 사용 중인 것으로 보아 메모리 부족 문제가 맞는 것으로 보입니다.

따라서, Swap Memory를 통해 디스크 공간을 이용하여 메모리를 대체해보겠습니다.

단점 :
RAM 비해 디스크의 속도가 매우 느리므로, 성능 저하로 이어질 수 있습니다.
-> Scale up이 정답에 가깝겠지만 AWS 계정을 지원받아 사용하는 상황이기 때문에 선택지는 없습니다.

Swap Memory는 램 메모리의 2배 또는 그 이상을 추천한다고 합니다.

t3.medium은 메모리가 대략 4GB이니 128M x 64= 8192, 8GB로 Swap Memory를 설정하겠습니다.

sudo dd if=/dev/zero of=/swapfile bs=128M count=64

  • dd : 블록 단위로 파일 복사 및 변환 명령어
  • if : 지정한 파일을 입력 대상으로 설정
  • of : 지정한 파일을 출력 대상으로 설정
  • bs : 한 번에 작업 가능한 byte 크기
  • count : 지정한 블록 수 만큼 복사
# swapfile 권한 설정
sudo chmod 600 /swapfile

# swap 공간 생성
sudo mkswap /swapfile

# swap 공간에 swap memory 추가
sudo swapon /swapfile

# 동작 확인
sudo swapon -s

# 스왑 영역 비활성화
sudo swapoff -a

# 시스템 부팅 시마다 자동으로 활성화되도록
# swap 파일시스템 설정
sudo vi /etc/fstab

# /etc/fstab의 가장 마지막에 추가
/swapfile swap swap defaults 0 0

-> 설정 이후 메모리 부족에 따른 딜레이 없이 정상적으로 작동하는 것을 확인했습니다.

profile
데이터 엔지니어를 꿈꾸는 거북이, 한걸음 한걸음

0개의 댓글