EC2에서 gradle을 사용하면서 아래 캡처와 같이 끝나지 않고 계속해서 수행되다가 결국은 서버가 뻗어버리는 현상이 자주 발생했다.
compile이나 test 중에 이런 현상이 잦았는데, 이렇게 멈춰버리면 수행 취소도 안되고 다른 터미널에서는 접속도 안되는 답이 없는 상황으로 흘러가서 결국 EC2 인스턴스를 재시작해야했다.
지금까지는 이게 내가 짠 코드에 문제가 있거나 환경이 안맞아서 생기는 오류라고 생각했는데, 검색을 하다보니 혹시 메모리 부족 때문에 생기는 현상이 아닐까 생각이 들었다.
AWS에서 프리티어로 제공하는 t2.micro의 메모리는 고작 1GB이다.
gradle 멈춤 현상으로 검색을 하다보니 gradle은 아니지만 내 경우처럼 프로세스 중에 서버가 먹통이 된 경우를 찾을 수 있었고, 스왑파일을 사용하여 메모리를 할당해주는 방법으로 대부분 해결을 한 것으로 보였다.
ubuntu 공식 문서에 의하면 메모리가 1기가 이하일 경우 스왑 메모리는 최소 실제 RAM 메모리 크기만큼 할당 하는 것이 좋고, 디스크 용량의 문제가 없다면 두 배의 메모리를 할당하는 것을 권장한다. 그래서 나는 2기가를 할당했다.
free
스왑 파일을 생성하기 전에 메모리를 확인해보았다.
이후의 과정은 AWS 공식 문서에서 명령어들을 친절하게 알려주고 있어 따라하기만 하면 됐다.
sudo dd if=/dev/zero of=/swapfile bs=128M count=16
스왑 파일을 생성하는 명령어이다.
AWS 공식문서에서는 4GB의 크기의 스왑파일로 예제를 제공한다.
bs*count만큼 메모리가 할당되는 명령어이기 때문에, 나는 count를 절반 줄인 16으로 변경하고 2GB 크기의 스왑 파일을 생성했다.
sudo chmod 600 /swapfile
스왑 파일의 읽기 및 쓰기 권한을 업데이트 한다.