Ubuntu 서버에서 메모리 사용량 확인 및 스왑 설정으로 안정성 높이기

@SharkniA · May 02, 2025 · 5 min read

image1

서론

최근에 메모리가 1GB 미만인 오라클 클라우드 서버를 운용하면서 1GB 미만의 소형 Ubuntu 서버에서 여러 Docker 컨테이너(FastAPI 기반) 서비스를 운영하면서 메모리 부족 문제로 인해 시스템이 비정상적으로 느려지는 문제를 겪었습니다. Dev와 Prod를 한 서버에 다른 컨테이너로 두고 있었는데, 두 개의 배포가 동시에 이뤄질때엔 사용 불가능할 정도의 느려짐 현상을 겪었고, 모니터링 툴로 확인하니 평상시에 이미 메모리가 80% 이상 차있는 것을 확인해 이게 원인임을 직감했습니다.

이 문제를 해결하기 위해 서버의 메모리 사용 상황을 점검하고, 필요에 따라 스왑을 설정하여 서버의 안정성을 확보하는 작업을 진행했습니다. 그 과정을 기록합니다.

현재 메모리 사용량 확인

오라클 클라우드의 모니터링 기능을 활용할 수도 있지만, 우분투 내에서 한 번 더 확인해봤습니다. 다음의 명령어를 사용했습니다.

free -h

이 명령을 통해 used, free, available, buff/cache 등의 메모리 상태를 한눈에 파악할 수 있습니다. 사용 중이던 서버는 물리 메모리가 약 950MiB 수준이었고, 여유 공간이 100MiB도 되지 않아 매우 불안정한 상태였습니다.

컨테이너별 메모리 사용량 확인

다음의 명령어를 사용해 실시간으로 어떤 컨테이너가 메모리를 많이 사용하고 있는지 확인할 수 있습니다.

docker stats

dev용 postgresql db까지 한 번에 돌리고 있어서 그게 원인일 줄 알았지만 그렇진 않았습니다.

CONTAINER ID   NAME                      CPU %     MEM USAGE / LIMIT     MEM %     ...
92c25148aa93   FastAPIWeb                32.89%    81.21MiB / 956.8MiB   8.49%
fe46e4749d6c   FastAPIWeb-dev            49.39%    103.9MiB / 956.8MiB   10.86%
8aba5cb599d8   dev-db                    0.00%     39.73MiB / 956.8MiB   4.15%
7983c11822e3   python_app                0.00%     44.13MiB / 956.8MiB   4.61%

결과적으로 FastAPI 기반의 컨테이너들이 상대적으로 메모리를 가장 많이 사용 중이었지만, 절대적인 사용량 자체는 높지 않음을 확인할 수 있었습니다. 퍼센테이지가 높은것은 워낙 전체 시스템 메모리가 작기 때문에 상대적으로 눈에 띄는 것일 뿐입니다.

Swap 파일 설정으로 안정성 확보

메모리가 부족한 상황에서 Linux 시스템이 강제 종료 없이 버티도록 하기 위해 스왑 공간을 추가로 설정했습니다. 스왑은 디스크 공간을 메모리처럼 사용하는 방식을 의미합니다.

# 1GB swap 파일 생성
sudo fallocate -l 1G /swapfile

# 올바른 권한 설정
sudo chmod 600 /swapfile

# 스왑 포맷 지정
sudo mkswap /swapfile

# 스왑 활성화
sudo swapon /swapfile

# 재부팅 시에도 적용되도록 /etc/fstab에 등록
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

설정이 끝난 후 다시 free -h 명령어로 확인한 결과,

Swap:          1.0Gi       259Mi       764Mi

약 260MiB가 이미 스왑으로 사용 중임을 확인했습니다.

결론

급한불은 껐다고 할 수 있지만, 결국 현재 너무 사양이 좋지 않기 때문에 실서버용 클라우드를 하나 더 만드는 것이 현명해보입니다. (동시 배포의 경우 CPU 점유율도 엄청나게 오릅니다. )

@SharkniA
만 6살 백엔드 개발자
© SharkniA, Built with Gatsby.