환경

-OS : Ubuntu 24.04 LTS (GNU/Linux 6.8.0-1008-aws x86_64) (프리티어)

-인스턴스 유형 : t2.micro(1 GiB 메모리), (프리티어)

-스토리지(ELB) : 1 x 30 GiB(gp3)

 

문제 상황

./gradlew clean build

위 명령어를 통해서 스프링부트 프로젝트를 빌드를 하는데 아무리 기다려도 완료가 되지 않았다.

 

원인

스프링 부트 프로젝트를 빌드하는 과정에서는 많은 메모리를 필요로 하기 때문에, 메모리가 부족하면 빌드가 매우 느려지거나 아예 완료되지 않을 수 있다.

t2가 메모리를 1GiB 만 제공하기 때문에 스프링 부트 프로젝트를 빌드하는데 실패한 것이었다.

 

해결 방법

1. 인스턴스 유형을 업그레이드 하여 더 많은 메모리를 사용

예를들어, 예를 들어, t2.medium 인스턴스는 4 GiB의 메모리를 제공하기 때문에 이로 인스턴스를 교체하는 방법도 있다.

하지만 나는 돈이 없는 학생이기 때문이 이 방법을 선택하지 않았다.

 

2. 스왑 메모리 사용

스왑 메모리

스왑 메모리는 시스템의 물리적 메모리(RAM)가 부족할 때 하드 디스크의 일부를 가상 메모리로 사용하는 것이다. 이렇게 하면 RAM이 부족할 때 시스템이 멈추는 대신 디스크를 사용하여 추가적인 메모리를 확보할 수 있다.

 

나의 서버 배포 환경을 보면, 램은 1GiB 이고, 저장 장치 볼륨 크기는 30GiB이다.

램의 용량이 저장 장치 볼륨 크기보다 상대적으로 작은 것을 확인할 수 있다.

그래서 저장 장치의 볼륨을 빌리는 것이다.

관련 개념은 아래의 글을 참고하기를 바란다.

2023.07.02 - [컴퓨터 구조 & 운영체제/운영체제] - [운영체제] 페이징을 통한 가상 메모리 관리

 

[운영체제] 페이징을 통한 가상 메모리 관리

이 글은 혼자 공부하는 컴퓨터 구조 + 운영체제 (저자 : 강민철)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다. 연속 메모리 할당의 문제점은 아래와 같다. 외부 단편화

rebugs.tistory.com

 

 

1. 스왑 파일 생성

sudo dd if=/dev/zero of=/swapfile bs=128M count=16
  • dd: 데이터를 복사하는 명령어이다.
  • if=/dev/zero: 입력 파일로서, 크기가 0인 무한대의 빈 바이트 스트림을 제공하는 특수 파일이다.
  • of=/swapfile: 출력 파일로서, 이 경우 스왑 파일의 경로를 지정한다.
  • bs=128M: 블록 크기를 128MB로 설정한다.
  • count=16: 128MB 블록을 16번 써서 2GB(128MB * 16)의 스왑 파일을 생성한다.

 

2. 스왑 파일에 대한 권한 설정

sudo chmod 600 /swapfile
  • chmod 600 /swapfile: 스왑 파일의 권한을 소유자만 읽고 쓸 수 있도록 설정한다.
  • 600: 소유자에게만 읽기와 쓰기 권한을 부여하는 권한 설정 값이다.

 

3. 스왑 영역으로 설정

sudo mkswap /swapfile
  • mkswap /swapfile: 스왑 파일을 스왑 영역으로 초기화하여 사용할 수 있도록 준비한다.

 

4. 스왑 사용 시작

sudo swapon /swapfile
  • swapon /swapfile: 지정된 스왑 파일을 활성화하여 스왑 메모리로 사용하기 시작한다.

 

5. 스왑 상태 확인

sudo swapon -s

이렇게 출력이 된다면 정상적으로 스왑이 적용된 것이다.

 

6. 재부팅 후에도 스왑이 유지되도록 설정

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
  • echo '/swapfile none swap sw 0 0': 스왑 파일을 /etc/fstab 파일에 추가하기 위한 문자열을 생성한다.
  • | sudo tee -a /etc/fstab: 생성된 문자열을 /etc/fstab 파일의 끝에 추가한다.
  • /etc/fstab: 시스템이 부팅될 때 자동으로 마운트할 파일 시스템 목록을 지정하는 파일이다.

 

이렇게 스왑 메모리를 사용하면 부족한 메모리를 하드 디스크로 대체할 수 있다.

 

참고 

https://ksh-coding.tistory.com/40

 

EC2 gradle build 시 무한 로딩 오류(메모리 문제)

EC2에서 git clone으로 서버 파일을 clone하고 ./gradlew test 를 했는데 :compileQuerydsl 에서 무한 로딩이 걸리고 넘어가지 않았다. 구글링을 진행해보니 무한 로딩이 걸리는 오류는 메모리 부족 문제일 수

ksh-coding.tistory.com

 

https://jjong2.tistory.com/70

 

ec2 스프링 빌드 시 멈춤 현상 해결법

스프링 빌드를 하는데 빌드 시간이 1초씩 늘어나는게 아니라 10초 이상씩 늘고, 빌드도 안되길래 여러번 껐다 켰다 반복해서 빌드를 해봤는데 소용없었다 free tier로 ec2를 이용하면 ram이 1기가라

jjong2.tistory.com