스프린트 1, 2, 3때 인프라 쪽을 전혀 다루지 않다가 4에 들어서 인프라를 다루게 되었다. 앞서 인프라를 담당했던 팀원들에게 간단하게 인수인계를 받았는데 막상 해보려하니 생각하지 못했던 부분에서 막히는 경우가 있었다. 이번에도 소나큐브를 실행시키려는데 명령어를 잘친 것 같은데 실행되지 않았다. 나중에 알고보니 Swap Memory 설정을 해주지 않아서였다. (감사합니다 조조그린!)
프로그램을 실행하다보면 메모리가 부족할 수 있다. 특히 이번 프로젝트들에서 t4g.micro
인스턴스를 쓰면 메모리가 1G이다. 무거운 프로그램은 메모리가 부족해서 돌릴 수가 없다.
그래서 당장 메모리에서 필요하지 않다면 그 메모리 슬롯은 디스크에 잠시 놔둬서 메모리 공간을 확보하고, 디스크에 내려간 메모리 슬롯은 필요할 때 다시 올릴 수 있다. 이를 Swap Memory라고 한다. 물론 디스크의 읽기/쓰기는 메모리에서보다 느리지만 메모리가 부족해 프로그램이 실행되지 않는 것보다는 훨씬 나을 것이다.
리눅스 공식 문서에 따르면 Swap Memory를 사용하는 방법이 두 가지가 있다.
스왑 파티션은 하드디스크에서 swapping을 위해서만 사용되는 파티션이다. 다른 어떤 파일도 이 공간을 사용할 수 없다. 파티션 전체가 스왑용으로 동작하므로 스왑 파일에 비해 성능저하가 덜 하다는 장점이 있지만 스왑 파티션 영역으로 사용할 전용 파티션을 확보하기 어려울 수 있다는 단점이 있다.
스왑 파일은 파일 시스템에 존재하는 특별한 파일이다. 그리고 이 파일을 스왑 영역으로 사용한다. 파티션은 디스크에서 연속된 공간에 위치하지만, 스왑 파일은 연속된 공간이 아닐 수도 있다.
메모리가 1G인것을 알 수 있다.
실습은 swap file을 이용해서 해보기로 했다.
sudo dd if=/dev/zero of=/swapfile bs=128M count=16
128 * 16
으로 총 2GB의 swapfile을 설정해줬다.
메모리를 얼마나 줘야할지 몰랐는데, 일반적으로 RAM 크기의 두 배를 준다고 한다. 왜 하필 두 배인지 궁금해서 찾아봤는데 딱히 마땅한 이유를 찾지 못했다. 예전에 성능이 최적화가 되지 않았을 때부터 내려오던 관습 같은 것 같다.
sudo chmod 600 /swapfile
swapfile에 읽기/쓰기가 가능하도록 권한설정을 해줬다.
# Linux 스왑 영역 설정
sudo mkswap /swapfile
# 스왑 공간에 스왑 파일 추가하여 스왑 파일 즉시 사용 가능
sudo swapon /swapfile
# /etc/fstab vi 에디터 열기
sudo vi /etc/fstab
# 파일의 맨 끝 줄에 아래 명령어 작성
/swapfile swap swap defaults 0 0
이후 free
명령어를 치면 스왑 메모리가 늘어나있는 것을 볼 수 있다.
운영체제 수업 들을 때 이론적으로만 배웠던 것을 실제로 적용해봐서 흥미로웠다. 소나큐브 뿐만 아니라 젠킨스 같은 프로그램을 돌릴 때도 써야할 것 같다.