AWS EC2 build 무한로딩 에러(EC2 메모리 부족 현상 대처)
문제가 발생한 상황
문서화 작업을 추가하여 githun에 push 하고 AWS EC2로 접속하여 git pull을 받아 새롭게 REST API 서버를 띄우려고 했습니다.
./gradlew build 명령어를 수행하던 중 테스트 부분에서 더 이상 퍼센티지가 올라가지 않으며 시간만 지나가는 상황이 발생하였습니다.
처음에는 당황하여 SSH를 그냥 닫아버리자 한동안 연결이 되지 않기도 하였습니다.
이후에 상황을 재구성 하였을 때 똑같은 상황이 발생했고 Ctrl + Z를 사용하여 해당 쉘 스크립트로부터 빠져나오고 그 뒤로부터는 EC2 환경에 엄청나게 버벅거리기 시작합니다.
이후에 sar 명령어를 사용하여 시스템 자원을 얼마나 사용하고 있는지 확인하고자 하였는데 메모리 사용량이 95%에 육박한 것 같았습니다.
저와 비슷한 에러를 겪는 분들을 구글링하여 보았습니다.
https://okky.kr/article/992276
OKKY | AWS EC2 Spring boot gradle 빌드가 안됩니다..
안녕하세요. AWS를 처음 접해보는 코린이입니다. 다름이 아닌 AWS에서 EC2를 통해 Spring Boot를 배포하려고 합니다. Git Clone을 한 뒤, sudo ./gradlew build 명령어를 쳤는데 compileJava 라고 나온 뒤 아무 반
okky.kr
https://okky.kr/article/1066685
OKKY | aws 에서 springboot 빌드중에 무한로딩이 걸립니다.
안녕하세요. 서버호스팅을 처음 시도하는 신입개발자입니다. 토이프로젝트로 간단하게 게시판같은거 하나 만들어볼려고 aws ec2에 ubuntu 인스턴스를 생성했습니다. 간단하게 프로젝트를 생성하
okky.kr
https://sundries-in-myidea.tistory.com/102
AWS EC2 프리티어에서 메모리 부족현상 해결방법
AWS free tier를 사용하다보면 2%가 부족할 때가 있다. AWS 프리티어는 가난한 대학생에게는 한줄기 빛과 같은 존재인데, AWS의 프리티어라서 적게 돈이 나가는 것도 좋고, 실제로 이것저것 해볼 수 있
sundries-in-myidea.tistory.com
결국에는 프리티어이기 때문에 메모리가 부족해서 벌어지는 일 같습니다.
해결방법
해결방법에는 2가지가 보였습니다.
1. 리눅스 스왑 메모리를 사용하자
스왑메모리란 실제 메모리가 가득 차고 더 많은 메모리가 필요할 때 디스크 공간을 대체해서 사용하는 것입니다.
즉, RAM 대신에 HDD를 가상 메모리로 사용합니다.
실제 메모리보다 하드디스크를 사용하기 때문에 속도 면에서는 현저히 떨어집니다.
dd 명령어를 통해 swap 메모리를 할당합니다.
sudo dd if=/dev/zero of=/swapfile bs=128M count=16
128씩 16개의 공간을 만드는 것이여서 우리의 경우 count를 16으로 합니다. 즉, 2GB 정도 차지하는 것입니다.
스왑 파일에 대한 읽기 및 쓰기 권한을 업데이트합니다.
$ sudo chmod 600 /swapfile
Linux 스왑 영역을 설정합니다.
$ sudo mkswap /swapfile
스왑 공간에 스왑 파일을 추가하여 스왑 파일을 즉시 사용할 수 있도록 만듭니다.
$ sudo swapon /swapfile
절차가 성공했는지 확인합니다
$ sudo swapon -s
- /etc/fstab 파일을 편집하여 부팅 시 스왑 파일을 활성화합니다.
$ sudo vi /etc/fstab
파일 끝에 다음 줄을 새로 추가하고 파일을 저장한 다음 종료합니다.
/swapfile swap swap defaults 0 0
free 명령어를 통해 메모리상태를 확인해봅니다.
전체적인 실행 절차입니다
스왑메모리를 적용하였으니 다니 빌드를 수행하여 보겠습니다.
성공적으로 잘 수행됩니다.
2. 메모리가 부족하기 때문에 로컬에서 빌드하여 빌드된. jar 파일만 넘겨서 실행하자.
최후의 상황에 시도하려고 했으나 1번방법으로 해결되어서 다행입니다.
출처
https://aws.amazon.com/ko/premiumsupport/knowledge-center/ec2-memory-swap-file/
스왑 파일을 사용하여 Amazon EC2 인스턴스의 스왑 공간으로 메모리 할당
1. dd 명령을 사용하여 루트 파일 시스템에 스왑 파일을 생성합니다. 명령에서 bs는 블록 크기이고 count는 블록 수입니다. 스왑 파일의 크기는 dd 명령의 블록 크기 옵션에 블록 수 옵션을 곱
aws.amazon.com