레넌의 개발 일기

Swap Memory로 메모리 문제 해결하기 본문

DevOps

Swap Memory로 메모리 문제 해결하기

brorae 2022. 10. 26. 00:12

젠킨스를 구축하는 과정에서 빌드를 끝마치지 못하고 서버가 죽어버리는 현상이 발생했다. 처음에는 무슨 문제인지 인지하지 못하였고 서버를 껐다 켜보기만을 반복하였다. Gradle 빌드의 문제인 줄만 알고 빌드의 속도나 의존성을 계속 봤었다. 하지만, 문제는 코드에 있지 않았다. 바로 메모리가 부족하기 때문에 발생한 일이었다.

우아한테크코스에서 제공해주는 인스턴스는 t4g.micro이다. 그렇기에 Memory는 1GB 밖에 되지 않았다. 1GB는 젠킨스 위에서 빌드를 돌리기에는 턱 없이 부족했던 것 같다. 따라서 이 문제를 해결하기 위해서 Swap Memory라는 것을 이용하였다.

 

Swap Memory란?

실제 메모리가 가득 찼는데 더 많은 메모리가 필요로 할 때, 하드디스크의 공간을 가상 메모리로 대체하여 사용하는 것을 의미한다.

실제 메모리보다는 속도가 느리지만, 시스템이 다운되거나 장애를 발생시키는 것 보다는 스왑 메모리를 활용하여 안정성을 높일 수 있는 방법이다.

 

Swap Memory를 사용해보자 !

1. 아래의 명령어로 용량이 얼마나 남아있는지 확인한다.

$ df -h

 

2. free 명령어로 현재 스왑메모리를 사용하고 있는지 확인한다.

$ free

스왑 영역이 보이지 않거나 0이라면 사용하고 있지 않다는 것을 의미한다.

 

3. 'swapfile'이라는 이름으로 스왑 메모리를 2GB 생성한다.

$ sudo fallocate -l 2G /swapfile

 

4. 파일의 권한을 600으로 수정한다.

$ sudo chmod 600 /swapfile

참고) 600은 root 계정만 읽기/쓰기가 가능하다는 의미이다.

 

5. 생성한 swapfile로 Swap Memory를 활성화 한다.

$ sudo mkswap /swapfile
$ sudo swapon /swapfile

 

6. 마지막으로 서버가 재부팅 되어도 Swap Memory가 적용되도록 한다.

$ sudo vi /etc/fstab

...

/swapfile swap swap defaults 0 0

...

위 내용을 파일에 추가해준다.

 

7. 마지막으로 2번의 free 명령어를 통해 Swap Memory가 적용되었는지 확인한다.

$ free

 

마무리

스왑메모리를 적절히 사용하면 서버를 안정적으로 사용할 수 있다. 특히, 프리티어로 서버를 구축해야하는 경우에는 더욱 필요할 것 같다. 스왑메모리의 동작 방식에 대해서 추가적인 공부를 해봐야겠다.

 

 

참고

https://aws.amazon.com/ko/premiumsupport/knowledge-center/ec2-memory-swap-file/

https://facerain.club/swap-memory/