Ubuntu swap memory 설정하기(feat. aws ec2)

POII·2022년 10월 12일
1

개요

ec2에서 프리티어로 서버 프로그램을 만들어 테스트하던 중, 중간 중간 ssh 접속이 안될 때가 있었다. ec2 management 창에서 확인해보니 메모리 사용량보다 큰 메모리를 사용하고 있어 시스템이 다운 된 것이었다.
vscode를 ec2 인스턴스에 ssh연결해서 사용할 때 linter, prettier 등의 확장을 너무 많이 사용해서 이런 일이 벌어진 것 같다..(추정)
프리티어 이상의 메모리를 가진 인스턴스를 추가 결제해야하나 고민하던 중 학교에서 배운 swap 이 생각나서 이를 활용해보기로 하였다.


swap memory란?

디스크 공간의 일부를 메모리처럼 활용하는 방법이다.
즉, 디스크를 가상의 메모리로 활용하는 방법이다.
물론 물리적으로는 메모리가 아닌 디스크이기 때문에 속도는 물리 메모리에 비해 현저히 떨어진다.
하지만 물리 메모리보다 크기가 큰 프로세스 실행을 가능하게 해주거나, 더 많은 프로세스를 메모리에 올려 효율적으로 사용가능하게 하는 등 여러가지 장점이 있어 이를 사용한다.
실제로 어떤 부분을 메모리에 올리고 디스크에 올릴지는 운영체제가 관리한다. 이 글은 swap을 실제로 적용하는 법이 주제이기 때문에 이론적인 면은 간단하게 작성하였다. 자세한 원리가 궁금하다면 os swapping 등을 검색엔진에 검색하면 많은 글들이 나오니 적당한 글을 찾아 읽어봐도 좋을 것 같다.


Ubuntu 에서 swap 사용하기

먼저 사용가능한 디스크 용량이 얼마나 있는지 알아보자

df -h

위 명령어로 사용가능한 디스크 공간을 체크할 수 있다.
만약 ec2 등 가상머신을 사용한다면 해당 컴퓨터에 접속하여 터미널에 명령어를 입력해주면 된다.

우분투에서는 swapfile을 생성해 swap memory를 이용할 수 있다. 먼저 swap 파일을 만들어주자.

sudo fallocate -l 1G /swapfile

2G라고 적힌 부분이 스왑으로 사용할 디스크 공간의 크기이다. 내가 사용하는 프리티어의 메모리는 1G인데 가상 메모리까지 합쳐 두 배로 있으면 충분할 것 같아 1G로 설정하였다.

다음으로 스왑파일의 권한을 루트만 읽고 쓸 수 있도록 변경해준다.

sudo chmod 600 /swapfile

이제 스왑파일을 활성화하자.

sudo mkswap /swapfile
sudo swapon /swapfile

마지막으로 프로그램이 재부팅되어도 스왑이 적용되도록 아래 파일을 열어 수정해준다.

sudo vi /etc/fstab

해당 파일의 맨 밑에 아래 문구를 추가해주자

/swapfile swap swap defaults 0 0

그 후 아래 명령어로 swap이 잘 적용되었는지 확인해 볼 수 있다.

free -h

여기까지가 swap memory를 이용하는 방법이다

밑의 코드로 swap memory할당을 해제할 수 있다.

sudo swapoff /swapfile

더 이상 사용하지 않는다면 파일까지 완전히 삭제해주자.

마무리

ssh로 ec2인스턴스와 연결해 vscode를 실행하면 멈추는 현상의 원인은 사실 추정일뿐 정확히는 모르겠다..다만 이를 적용하고는 멈추는 빈도가 현저히 줄었다.(두달에 한번?)

혹시 몰라서 내 코드에 memory leak가 있나 확인해봤는데 그것도 아니었다.. 추후 정확한 이유를 알게된다면 다시 정리하여 포스팅 해야겠다.

참고한 글
https://aroundck.tistory.com/2659
https://sergeswin.com/1034/
https://facerain.club/swap-memory/

--끝--

profile
https://github.com/poi1649/learning

0개의 댓글