EC2 프로세스가 자꾸 kill 된다면? (feat. free-tier)

정성현·2022년 12월 29일
0

AWS

목록 보기
1/2

현재 졸업 프로젝트로 진행한 감성일기 앱을 구글스토어와 원스토어에 배포하기 위해 모델 API 서버를 aws에 올리는 것을 진행하고 있다.

서버 비용이 부담되니 1년간 무료로 쓸 수 있는 free-tier를 통해 진행하고 있는데, 그 과정이 순탄치 않다.....

최근에 공부하고 있는 도커를 최대한 활용하려고 하고 있다.

도커파일을 이용해 aws 서버 내에서 이미지를 만들려고 했는데, torch를 설치하다가 프로세스가 자꾸 kill 되는 문제가 있었다.

free-tier가 지원하는 램이 1GB이다 보니 torch library를 설치하는 과정에서 메모리 초과가 되지 않았나 하는 가설을 세웠다.

그래서 생각한 해결책이 로컬에서 해당 도커파일을 실행하여 이미지를 만들고, 컨테이너에 올린 뒤, 컨테이너 안에 파일 복사 후, 필요한 모든 라이브러리들을 설치한 뒤, 해당 컨테이너를 이미지 파일로 추출하여 docker hub에 push한다.

그리고, aws에서 docker를 설치한 뒤, docker pull 명령으로 이전에 push 했던 이미지를 불러와, 컨테이너에 올리고 실행하는 것이다.

로컬에서 테스트 할 때는 잘 돼서 당연히 aws 서버에서도 잘 되겠거니 했는데, 모델 서버를 실행하는 도중에 프로세스가 죽었다.....ㅠㅠ

free-tier에 올리는 건 불가능한 건가 하고, 포기하려는 찰나에 구글링 도중 이 블로그 글(EC2가 갑자기 멈춘다면?(feat.swap 메모리))을 발견했다.

이 분은 스왑을 이용해 문제를 해결하셨다고 한다.

"스왑이란 쉽게 말하면 내 하드디스크(또는 ssd)의 공간을 빌려서 가상 메모리로 사용하는 것이다."라고 설명하신다.

맞다. 생각해보니 램이 부족할 때, ssd의 메모리를 빌려오는 기술이 있었구나!

$ free -m

위 명령어를 사용하여, 메모리 사용량 및 Swap 메모리를 볼 수 있다.
Swap 메모리가 0인 것을 확인했으니, Swap 메모리를 잡아주자.

무작정 높게 잡는 것이 좋은 것이 아니고, AWS 공식 문서에 권장 스왑 메모리 크기가 있다고 한다.

RAM 2GB 이하 -> RAM 용량의 2배(최소 32MB)

RAM 2GB 초과 64GB 미만 -> RAM 용량의 0.5배

RAM 64GB 초과 -> 워크로드 또는 사용 사례에 따라 다름

현재 내가 가진 인스턴스의 RAM은 1GB이므로, 스왑을 2GB로 잡아주기로 했다.


1)

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

dd 명령을 사용하여 루트 파일 시스템에 스왑 파일을 생성한다.

bs는 블록 크기, count는 블록 수로 이 두 수를 곱한 값으로 스왑 파일의 크기를 결정한다.

주의해야 할 것은 지정한 블록 크기는 내 인스턴스에서 사용 가능한 메모리보다 작아야 한다.

스왑 파일은 2GB(128MB x 16)로 해 주었다.


2)

sudo chmod 600 /swapfile

스왑 파일의 읽기 및 쓰기 권한을 업데이트한다.


3)

sudo mkswap /swapfile

스왑 공간에 스왑 파일을 추가하여 스왑 파일을 즉시 사용할 수 있도록 한다.


4)

sudo swapon /swapfile

리눅스 스왑 영역을 설정한다.


5)

sudo swapon -s

위에서 진행한 절차가 성공했는지 확인한다.
현재까지 이상없이 잘 진행된 것을 확인할 수 있다.


6)

sudo vi /etc/fstab

/etc/fstab 파일을 편집하여 부팅 시 스왑 파일을 활성화할 수 있게 한다.
아래 내용을 파일 맨 끝에 새로 추가하고 파일을 저장한다.

/swapfile swap defaults 0 0

파일 저장 시에는 esc -> :wq!를 이용한다.


결과

free -m

스왑 메모리가 잘 할당된 것을 볼 수 있다!



출처 : https://wooogy-egg.tistory.com/83

profile
데이터에 관심이 많은 백엔드 개발자

0개의 댓글