[EC2] Ubuntu Swap Memory 설정으로 메모리 부족 문제 해결(EC2 멈춤 해결)

1. 서론

  • EC2에서 Gradle 빌드인스턴스가 멈추는 현상이 발생했습니다.
  • 이는 메모리 부족으로 인해 발생한 문제로, 스왑 메모리(swap)를 설정하여 해결할 수 있었습니다.
  • 이번 글에서는 스왑 메모리란 무엇인지와 이를 설정하는 방법을 상세히 소개합니다.

2. 문제 발생 원인

EC2 인스턴스의 낮은 메모리 용량

  • AWS 무료 플랜에 포함된 t2.micro 인스턴스는 1GB 메모리를 제공합니다.
  • Jenkins 서버와 같은 애플리케이션은 백그라운드에서 많은 메모리를 소비하기 때문에 Gradle 빌드 과정에서 메모리가 부족할 가능성이 높습니다.

3. 스왑 메모리(Swap Memory)이란?

  • 스왑(Swap) 은 물리 메모리(RAM)가 부족할 때 보조기억장치 일부를 가상 메모리로 사용하는 방식입니다.
  • 스왑을 설정하면, 부족한 메모리 일부를 디스크로 대체하여 시스템이 중단되지 않고 정상적으로 동작할 수 있습니다.

4. 해결 과정: 메모리 스왑 설정

1) 스왑공간 생성

  • 메모리 스왑을 위해선 우선, 스왑을 위한 공간을 할당해야합니다.
  • 명령어로 128mb 블럭을 16개 만들어 2gb 용량을 확보했습니다.
sudo dd if=/dev/zero of=/swapfile bs=128M count=16 
  • 명령어 설명
    • dd 파일복사 및 변환 명령어, 데이터복사 또는 파일생성시 사용
    • if=/dev/zero 0으로만 채워진 파일 생성, 스왑파일 초기화용도
    • of=/swapfile 스왑파일 경로 지정
    • bs 블록크기지정
    • count 블록수지정
  • 출력결과
16+0 records in
16+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 32.2645 s, 66.6 MB/s

2) 스왑파일 권한설정

  • 스왑파일의 접근 권한을 설정해줍니다. 다른 그룹이나 사용자의 접근을 차단합니다.
sudo chmod 600 /swapfile # 스왑파일 권한설정, 다른그룹이나 사용자 접근 차단

3) 스왑 영역 설정

  • 커널이 생성한 스왑 파일을 스왑 영역으로 인식하도록 mkswap 명령어로 설정해줍니다.
sudo mkswap /swapfile
  • 출력결과
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=a6ded867-1c58-411e-89b3-7dcfafbc1217

4) 스왑 영역 활성화

  • swapon 명령어로 설정된 스왑 영역을 활성화해줍니다.
sudo swapon /swapfile # 스왑공간에 스왑 파일 추가 즉시활성화

5) 스왑 영역 확인

  • 성공적으로 적용되었는지 확인합니다.
sudo swapon -s
  • 출력결과
Filename         Type            Size            Used            Priority
/swapfile        file            2097148         0               -2
  • 또는 top 명령어로 확인할수 있습니다.
MiB Mem :    957.4 total,    108.4 free,    875.7 used,    102.1 buff/cache     
MiB Swap:   2048.0 total,   1345.2 free,    702.8 used.     81.8 avail Mem 

6) 스왑 영역 영구 저장

  • 부팅 시 스왑 파일이 자동으로 활성화되도록 설정합니다.
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
  • 각명령어는 다음과 같습니다.
    • tee 표준입력을 읽어 파일로 저장,
    • -a 기존파일내용유지하며 새로운 내용 추가 (append)
    • /etc/fstab 부팅시 마운트해야할 파일 시스템 정보와 스왑공간 저장하는 설정파일

  1. 결론
  • 스왑 메모리(Swap Memory) 를 활용하여 메모리가 제한적인 환경에서도 시스템을 안정적으로 운영할 수 있었습니다.
  • 스왑 메모리 설정은 간단하면서도 메모리 부족으로 인한 성능 문제를 효과적으로 완화할 수 있는 방법입니다.
  • 하지만 스왑 메모리는 디스크를 사용하기 때문에 실제 RAM만큼 빠르지 않습니다. 따라서, 가능하다면 RAM 용량을 늘리는 것이 더 나은 선택이 될 수 있습니다.