작업 환경
IDE: IntelliJ
Spring Boot: 3.2.3
Java: 20
EC2 Linux: Ubuntu
EC2에서 Spring 프로젝트를 Build 할 경우 어느 순간부터 진행률이 멈추고 가만히 있는 경우가 있습니다.
이는 EC2 인스턴스의 메모리 부족으로 인해 발생하는 문제인데, 프리티어를 사용하는 인스턴스에서 특히 자주 발생합니다.
EC2 - 모니터링의 CPU 사용율을 보면 gradlew을 build 했을 때 매우 높은 수치까지 상승하는 걸 볼 수 있습니다.
이 문제를 해결하기 위해선 Swap Memory 기능을 이용하여 RAM 부족 현상을 해결해야합니다.
Swap은 주 메모리를 보조해 시스템의 메모리 관리를 효율적으로 도와주는데, RAM이 가득 찼을 때 일부 데이터를 스왑 공간으로 옮겨 RAM을 정리해줍니다.
먼저 ./gradlew을 build 하다가 EC2가 멈췄다면 중지하고 다시 실행시켜줍시다.
그리고 터미널에 해당 명령어를 작성해줍니다.
sudo dd if=/dev/zero of=/swapfile bs=128M count=16
이 명령어는 dd 유틸리티를 사용하여 128MB 블록 크기로 총 16개의 블록을 가진 스왑 파일을 생성한다는 의미입니다.
128 x 16 = 2048 즉 2GB의 크기를 가지게 됩니다.
이제 Swap 파일의 권한을 설정해줘야 합니다.
sudo chmod 600 /swapfile
이제 스왑 공간을 설정해주어야 합니다.
sudo mkswap /swapfile
다음으로 스왑 활성화를 해줍시다.
sudo swapon /swapfile
마지막으로 재부팅 시 스왑이 유지되도록 /etc 폴더 내의 fstab 파일을 수정해야합니다.
cd /etc sudo vi fstab
sudo로 vi를 실행시켜 다음 줄을 추가시켜주면 됩니다.
/swapfile none swap sw 0 0
이제 인스턴스를 재시작 하더라도 자동으로 스왑 공간으로 마운트 하도록 설정합니다.
이제 정상적으로 ./gradlew build에 성공하는 걸 볼 수 있습니다!