픽블엽의 로그를 확인하던 중, 서버가 예상치 않게 재시작된 흔적을 발견했다. 원인을 추적한 결과, OOM(Out Of Memory)을 의심하게 되었고, 이를 방지하기 위해 SWAP 설정을 적용하게 됐다.
OOM (Out Of Memory) 은 시스템에 할당할 수 있는 물리 메모리가 부족해질 때 발생하는 현상으로, 커널이 이를 감지하고 메모리를 많이 사용하는 프로세스를 강제 종료시킨다. 이 경우 서버가 예기치 않게 중단되거나, 중요한 프로세스가 죽는 일이 발생할 수 있다.
SWAP은 메모리가 부족할 때, 디스크의 일부 공간을 메모리처럼 사용하는 방법으로 OOM을 예방하는 유용한 기법이다.
현재 픽블엽 서비스는 t2.micro 인스턴스에 nginx와 애플리케이션 서버를 함께 운영 중이다.
t2.micro는 메모리가 1GB에 불과하지만, 초기 트래픽이 많지 않기 때문에 저렴하게 시스템을 구축할 수 있다고 판단하고 ec2 한대에 모든 서버를 같이 운영 하기로 했다.
하지만 서버의 재시작 흔적을 본 후 다음과 같은 가능성들을 고려하게 됐다.
즉, 지금은 문제가 없어도 언제든지 메모리 부족 상황이 올 수 있다는 판단이 들었고, 그 대비책으로 SWAP 선택 했다.
bash
free -t
free -t 명령어를 통해 시스템의 메모리 상태를 확인 할 수 있다.
SWAP 크기는 AWS의 공식문서를 보면 권장 수준이 있다.
bash
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 그 다음에
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
위 명령어들을 차례대로 실행하면 1GB의 스왑 공간이 할당된다.
마지막 명령어는 SWAP의 영구 적용시켜 시스템이 재부팅돼도 자동으로 SWAP이 활성화 시켜준다. 하지만 반복 실행하면 부팅오류가 나는 원인이 되니 반드시 한번만 실행해야 한다.
bash
swapon --show
SWAP이 잘 적용 됐다면 위 이미지 같이 확인 가능하다.
t2.micro를 사용하더라도 실사용자가 많지 않다면 큰 문제는 없지만, 스왑은 거의 필수라고 생각한다.
특히, 예기치 않은 트래픽 급증이나 백그라운드 서비스가 늘어날 가능성이 있는 경우, 최소한의 SWAP 설정은 시스템을 안정적으로 운영하는 데 큰 도움이 될거라 예상한다.
t2.micro 같이 저사양 인스턴스는 메모리가 매우 제한적이니 OOM예방을 위한 SWAP설정은 권장을 넘어 필수라고 생각한다.
문제라고 한다면 실제로 디스크를 사용하는 시점에는 디스크 I/O에 부담이 있겠지만 서비스가 죽는 거랑 비교한다면 문제도 아니라고 생각한다.