환경
-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 - [컴퓨터 구조 & 운영체제/운영체제] - [운영체제] 페이징을 통한 가상 메모리 관리
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
'Cloud > AWS' 카테고리의 다른 글
[AWS + SpringBoot] 시간대 설정하기 (0) | 2024.09.20 |
---|---|
[AWS] Mac 에서 터미널로 EC2 접속 (0) | 2024.09.04 |
[AWS, JPA, MySQL] Table doesn't exist (0) | 2024.06.30 |
[Spring Boot, Linux] Error resolving template (0) | 2024.06.30 |