본문 바로가기
study/Infra

[AWS] EC2 프리티어 메모리 부족 현상 해결

by eo_neunal 2024. 1. 7.

0. 들어가며

'직팅' 서비스의 성능 테스트를 위해 nGrinder를 AWS EC2에 설치 및 실행했다.

t2.micro 인스턴스로 실행 시 아래와 같이 메모리 부족으로 인해 nGrinder 에이전트가 죽는 문제가 발생했다.

참고로, t2.micro 인스턴스의 사양은 아래와 같다.

이와 같은 문제를 해결하기 위해서 EC2의 인스턴스 유형 변경을 통해 RAM의 성능을 높일 수 있다. 하지만 해당 방법은 비용 부담이 발생하기 때문에 스왑 메모리(Swap Memory)을 통해 메모리 부족 현상을 해결했다.

1. 스왑 메모리(Swap Memory)

스왑 메모리(Swap Memory)란 컴퓨터의 주 메모리(RAM)가 모두 사용돼 추가적인 메모리가 필요한 경우 사용되는 보조 메모리다.

 

주 메모리가 가득 차거나 시스템이 더 많은 메모리를 필요로 할 때, 운영체제는 일부 데이터를 주 메모리에서 디스크의 스왑 영역(일반적으로 하드 디스크의 특정 파티션 또는 스왑 파일)으로 옮김으로써 메모리 부족 상태를 해소한다.

 

스왑 메모리는 물리적인 RAM보다 훨씬 느리기 때문에, 주 메모리보다 액세스 속도가 느리지만 시스템의 안정성과 성능을 유지하는 데 중요한 역할을 한다. 스왑 메모리를 사용하는 것은 시스템에 더 많은 프로세스를 동시에 실행할 수 있도록 하며, 실제 메모리 크기보다 큰 프로그램을 실행하는 데 도움이 된다.

스왑 메모리 적용 전 메모리 사용량을 확인해보자. (free 명령어로 메모리 사용량을 확인할 수 있다.)

1.2. 스왑 메모리 적용

1. 스왑 파일 생성

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

    • dd: 블록 단위로 파일을 복사하거나 파일 변환을 할 수 있는 명령어
    • 옵션
      • if: 지정한 파일을 입력 대상으로 설정
        • /dev/zero: 0으로 채워진 파일을 만드는 데 사용되는 더미 파일
      • of: 지정한 파일을 출력 대상으로 설정
      • bs: 블록 크기
        • 지정한 블록 크기는 인스턴스에서 사용 가능한 메모리보다 작아야 한다. 그렇지 않으면 ‘memory exhausted’ 오류가 발생한다.
      • count: 블록 수
    • 스왑 파일 크기 = 블록 크기 X 블록 수 (128MB X 16 = 2GB)
      • 시스템 RAM 용량이 2GB 이하일 때 권장 스왑 공간은 RAM 용량의 2배다.
      • 사용 중인 EC2의 메모리가 1GB이므로, 스왑 메모리를 2GB로 설정한다.

2. 스왑 파일 읽기 및 쓰기 권한 업데이트

$ sudo chmod 600 /swapfile

 

3. Linux 스왑 영역 설정

$ sudo mkswap /swapfile

4. 스왑 공간에 스왑 파일을 추가해 스왑 파일을 즉시 사용할 수 있도록 함

$ sudo swapon /swapfile

 

5. 프로시저가 성공적인지 확인

$ sudo swapon -s

 

6. 부팅 시 스왑 파일을 시작하도록 /etc/fstab 파일 편집

$ sudo vi /etc/fstab

 

파일 끝에 /swapfile swap swap defaults 0 0를 추가하고, 파일을 저장 및 종료(:wq)한다.

 

7. free 명령어로 메모리 사용량 확인스왑 메모리를 통해 사용 가능한 메모리 용량이 늘어났음을 확인할 수 있다.

스왑 메모리 설정 후 다시 nGrinder 테스트 실행 시 정상적으로 테스트가 수행된다.

References

스왑 파일을 사용하여 Amazon EC2 인스턴스의 스왑 공간으로 메모리 할당

Use a partition on your hard drive to allocate memory as swap space on an Amazon EC2 instance