[EC2, Ubuntu] 스왑 메모리 설정으로 부족한 메모리 보충하기

강민석·2023년 7월 15일
0

서론

현재 개발중인 api 서버의 CI/CD를 구성하기 위해 다음과 같은 파이프라인을 구축하려고 한다.

  1. GitHub 레포지토리에 커밋 내용 push
  2. Jenkins 서버에서 push 감지
  3. 프로젝트 clone 및 Docker Container로 build
  4. 빌드한 컨테이너를 AWS ECR에 업로드
  5. (생략)

파이프라인을 테스트 하던 중, Jenkins 서버에서 컨테이너가 빌드되던중에 다음과 같은 오류 로그와 함께 서버가 종료되는 문제가 발생한다.

wrapper script does not seem to be touching the log file in ...

구글링을 통해 원인을 찾아보니, 메모리 부족 때문일 가능성이 높다고 한다.

현재 Jenkins 서버를 배포중인 인스턴스는 t2.small로, 메모리가 총 2GB이다.

EC2 인스턴스의 메모리 용량을 늘리는 방법에는 다음 두 가지가 있다.

  1. 현재 실행중인 인스턴스의 스냅샷을 복사하여 새로운 인스턴스에 배포하기
  2. 스왑 메모리(Swap Memory)를 설정하여 가상 메모리 확보하기

1번 방법을 위해서는 Jenkins, GitHub 등과 관련된 정책 설정을 따로 해주어야 하기 때문에 매우 번거롭다. 지금은 테스트 서버를 운영중이기 때문에 2번 방법을 통해 간단하게 가상 메모리를 확보해보자.

(Ubuntu 22.04를 기준으로 작성되었습니다. 그 외의 버전에서는 작동하지 않을 수 있습니다)

스왑 메모리 설정

스왑 메모리를 구성하면, 디스크 공간을 가상 메모리로 사용하여 실제 메모리(RAM)의 용량보다 더 많은 양의 메모리를 확보할 수 있다.

다만 디스크 공간을 직접 사용하는 것이기 때문에, 속도가 느리다는 것을 감안해야 하며, 인스턴스의 용량 등을 고려해야 한다.

다음 과정을 통해 EC2 인스턴스의 스왑 메모리를 구성할 수 있다.
(참고: https://repost.aws/ko/knowledge-center/ec2-memory-swap-file)

1. 스왑 파일 생성

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

통상적으로 스왑 메모리의 크기는 실제 메모리의 2배 크기로 설정한다.
t2.small의 메모리 크기는 2GB이기 때문에, 4GB(bs(128M) * count(32))로 설정해준다.

2. 스왑 파일의 권한 업데이트

$ sudo chmod 600 /swapfile

3. Linux 스왑 영역 설정

$ sudo mkswap /swapfile

4. 스왑 공간에 스왑 파일 추가

$ sudo swapon /swapfile

5. 부팅 시 스왑 파일을 시작하기 위해 /etc/fstab 파일 수정

$ sudo vi /etc/fstab

위 명령어를 통해 해당 파일을 열고, 마지막 줄에 다음 내용을 추가한다.

/swapfile swap swap defaults 0 0

6. 정상적으로 스왑 메모리가 설정되었는지 확인

$ sudo swapon -s
$ free -h

4GB 크기의 스왑 메모리가 설정된 것을 확인할 수 있다.

0개의 댓글