Jenkins를 t2.micro EC2 환경에서 실행시킬 경우 단순 컨테이너 실행만으로 350MB에 달하는 메모리 공간을 점유한다.
-> docker stats 로 확인해본 jenkins 의 메모리 점유율
만약 이 상황에서 Jenkins를 통해 Build를 진행하게 된다면...
jenkins 로 DB연결 없는 간단한 Spring Boot App을 Build 했을 시의 메모리 점유율
무려 610~650 사이의 메모리 공간을 점유하는 것을 확인할 수 있다.
나의 작은 프리티어 EC2
AWS 에서 제공하는 t2.micro 단위의 작은 EC2 가 사용자에게 기본적으로 제공하는 메모리 용량은 1GB
스토리지 용량은 30GB로 넉넉하게 제공하지만 1GB의 협소한 메모리 공간으로는 Jenkins로 Build 를 실행시키기에는 턱없이 부족하다.
Jenkins 이외에도 메모리를 많이 차지하는 다른 프로그램들을 실행시킬 때에 자주 EC2 인스턴스가 죽는 모습에 당황하는 경우가 많고, 원인을 정확히 진단하지 못할 경우 애꿎은 EC2 인스턴스만 재부팅하거나 종료하면서 시간을 많이 뺏기게 된다.
이를 해결하기 위해, 프리티어 EC2 환경에서는 Linux 에서 제공해주는 RAM Swap 기능을 활용해 EC2 인스턴스를 괴롭히는 것을 멈추고 넉넉하게 메모리 공간을 할당하여 Jenkins 혹은 그 이외의 프로그램들이 원할하게 실행될 수 있는 환경을 만들어주도록 하자.
Ram Swap / Swap Memory 란?
스왑 메모리란, 실제 메모리 Ram이 가득 찼지만 더 많은 메모리가 필요할때 디스크 공간을 이용하여 부족한 메모리를 대체할 수 있는 공간을 의미한다.
디스크 공간을 대신 사용하는 만큼 실제 메모리처럼 속도가 빠르지 않기 때문에 실제 운영환경에서는 사용을 지양하도록 하자.
aws 공식 문서
https://repost.aws/ko/knowledge-center/ec2-memory-swap-file
sudo dd if=/dev/zero of=/swapfile bs=128M count=32
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo swapon -s
sudo vi /etc/fstab
/swapfile swap swap defaults 0 0
free -m
Swap 공간이 잘 할당된 것을 확인할 수 있다