메모리와 스왑: 등급을 올려야 할 시점
정상적인 메모리 사용과 부족을 구분하는 방법, 작은 등급에서 스왑이 필요한 이유, 상위 요금제로 이동해야 할 신호를 설명해요.
업데이트 2026년 8월 23일
“2GB 중 120MB 여유”라는 문구는 초보자를 겁먹게 하고 Linux에서는 아무 의미도 없어요. 시스템은 빈 메모리가 쓸모없기 때문에 의도적으로 여유 메모리를 파일 캐시로 사용하거든요. 실제 상황은 다른 열이 보여줘요.
free를 올바르게 읽는 법
free -h
# total used free shared buff/cache available
# Mem: 1.9Gi 742Mi 102Mi 18Mi 1.1Gi 1.0Gi
# Swap: 1.0Gi 126Mi 898Mi
available을 보세요. 애플리케이션이 캐시를 밀어내고 확보할 수 있는 메모리 양이에요. 이 값이 0보다 충분히 크면 머신은 정상이에요. 이런 의미에서 free는 쓸모없어요.
경고 신호:
available이total의 10% 미만이에요.Swap used가 늘어나고 해제되지 않아요.vmstat 2에서si/so가 0이 아니고 계속 유지돼요. 시스템이 지속적으로 디스크로 페이징하고 있다는 뜻이에요.
무엇이 메모리를 먹고 있는지 확인하는 법:
ps aux --sort=-%mem | head -10
smem -tk -s uss 2>/dev/null | tail -10
스왑: 필요한가 아닌가
작은 스왑은 어느 티어에서든 유용해요. 오랫동안 사용되지 않은 페이지를 옮길 공간을 시스템에 주고, 짧은 스파이크 동안 프로세스가 즉시 죽는 것을 막아줘요. 메모리를 대체하지는 않아요. 디스크는 수백 배 느리거든요.
2GB 스왑 파일 만들기:
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile && swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab
시스템이 스왑을 과하게 쓰지 않도록 억제하기:
sysctl -w vm.swappiness=10
echo 'vm.swappiness=10' > /etc/sysctl.d/99-swap.conf
스왑 파일이 티어의 디스크 공간(VDS-1에서는 40GB)을 차지하고, 여기에 쓰는 것이 디스크 속도 대역폭을 소모한다는 점을 기억하세요. 디스크 부하를 참고하세요.
누수인가 메모리 부족인가
제어판 /hosting/vds/m/<id>의 주간 단위 메모리 그래프가 둘을 구분하는 데 도움이 돼요:
- 톱니 모양 — 한계까지 올라가고, 서비스가 재시작되면 떨어지고, 다시 올라가요. 애플리케이션의 누수예요. 더 높은 티어는 문제를 미룰 뿐이에요.
- 처음부터 한계에서 평평한 고원 — 작업 세트에 공간이 그냥 부족한 거예요.
- 급격한 하락 — OOM killer가 프로세스를 죽인 거예요. 메모리 부족 문서를 참고하세요.
요금제를 바꾸기 전에 당연한 것부터 챙기세요. journal의 SystemMaxUse를 제한하고, 데이터베이스에 합리적인 한도를 설정하고(MySQL은 기본적으로 꽤 많이 요구해요), 사용하지 않는 서비스를 제거하고(systemctl list-units --type=service --state=running), PHP-FPM과 Gunicorn의 워커 수를 줄이세요.
언제 업그레이드할까
정리 후에도 available이 몇 주 동안 0에 가깝고, 스왑이 계속 사용되고, 애플리케이션 전체가 필요하다면 더 높은 티어로 가세요. 메모리는 2, 4, 8, 16, 24, 32GB 시리즈를 따라 증가해요. 업그레이드는 상향만 가능하고 남은 일수에 대한 추가 결제가 있어요. 다운그레이드는 불가능해요. 디스크는 줄어들지 않거든요. 자세한 내용은 요금제 업그레이드 문서를 참고하세요.
흔한 실수
- 스왑을 완전히 비활성화하기. 스파이크 동안 시스템은 1분을 버티는 대신 프로세스를 죽여요.
- 스왑을 디스크 크기로 만들기. 머신이 죽지는 않겠지만 몇 시간 동안 기어갈 거예요. 이건 빠른 충돌보다 나쁘죠.
- htop에서
VIRT보기. JVM, PostgreSQL, Node의 가상 크기는 엄청나고 소비량을 반영하지 않아요.RES를 보세요.
장애가 난 후가 아니라 전에 메모리를 확인해야 해요. 임계값 알림을 설정하세요. 사이트 다운 알림 문서에 간단한 방법이 있어요.