카테고리 없음

메모리 스와핑

강예은 2023. 7. 18. 23:16

EC2 gradle build시 무한 로딩 오류 해결

2023. 5. 2. 00:38

오류 내용

EC2에서 ./gradlew build를 하면 무한로딩이 되면서 인스턴스를 중지한 후에 다시 실행시켜야 접속이 되는 상황이 발생했다.

 


원인

메모리 부족으로 인해 발생한 문제. 프리티어를 쓰다보니 1GB의 메모리로는 감당이 안되는 모양이다.


해결방법

스왑 공간을 사용해서 해결할 수 있다.

 

스왑공간이란 가상 메모리의 한 부분으로, 물리적 메모리가 부족할 때 사용된다. 하드 드라이브 혹은 SSD와 같은 저장장치에 할당되며, 컴퓨터가 메모리 부족시 덜 중요한 데이터를 스왑 공간에 임시로 저장한다.

 

 

1. 루트 파일 시스템에 스왑 파일 생성 (4GB)

sudo dd if=/dev/zero of=/swapfile bs=128M count=32


/////

메모리 스와핑

이후 해야할 과정은 메모리 스와핑이다. 이는 하드디스크를 가상 메모리로 전환시켜 램처럼 사용하는 것을 뜻한다.

이건 다른 블로그나 책 등에서 배포할 때 잘 설명하지 않는 부분인데, 만약 자기가 AWS의 프리티어를 사용하고 있다면 난 메모리 스와핑이 필수라고 생각된다.

왜냐하면 실제 빌드를 할 때 이 부분에서 램 부족 문제로 진행되지 않는 경우가 부지기수기 때문이다.

우리가 프리티어에서 설정한 인스턴스는 t2.micro인 경우가 많은데, 이는 램이 1기가 밖에 되지 않는다.

실제 내가 빌드 과정을 거쳤을 때 많이 겪었던 오류로, 80% EXECUTING 이후 더이상 나가질 못했다.

따라서 이 글을 보고 문제를 깨닫게 되었으며, 메모리 스와핑 또한 이 글을 참고로 진행하기로 한다.

먼저 AWS가 제시한 이 우분투 공식 글에서는, 1기가 이상에서는 최소 램과 같거나 2배까지라고 했으니, 2기가로 설정하여 진행해보자.

먼저 스와핑을 진행할 파일을 생성해주자.

$ sudo dd if=/dev/zero of=/swapfile bs=128M count=16

리눅스의 dd 명령을 사용해서 파일을 생성했으며, 2기가를 설정했으므로 블록크기는 128MB, 블록수는 16개로 설정했다. (2GB = 2048MB)

$ sudo chmod 600 /swapfile

파일에 대한 읽기 및 쓰기 권한을 업데이트 해주자.

$ sudo mkswap /swapfile

이제 해당 파일을 인스턴스 리눅스의 스왑 영역을 설정한다.

$ sudo swapon /swapfile

스왑 영역을 활성화 시켜준다.

$ sudo swapon -s

이후 절차가 성공했는지 확인해보자.

정상적으로 스와핑이 성공했다.

$ sudo vi /etc/fstab

이후 /etc/fstab파일을 vi편집기로 편집하여, 부팅시 스와핑을 활성화하도록 하자.

/swapfile swap swap defaults 0 0

vi 편집기를 통해 파일 맨 마지막 줄에 이 부분을 추가하고 파일을 저장한 다음 종료하면 된다.

이후 free를 입력하여 메모리를 확인해보면 스와핑이 제대로 진행되고 있는지 확인이 가능하다.

정상적으로 진행된다.

 

 

https://velog.io/@juno0713/Spring-Security-JWT-React-08.-%EB%B0%B1%EC%97%94%EB%93%9C-%EB%B0%B0%ED%8F%AC