← 글 목록

램 1GB도 안 되는 서버에 스프링 띄우기

개인 블로그용으로 제일 싼 클라우드 서버를 잡았다. Rocky Linux 9, 메모리는 free -m 찍어 보니 765MB. 스왑은 0.

스프링 부트 + JPA + 타임리프 정도면 될 줄 알았는데, 처음 띄울 때 뭘 하나 더 설치하던 중에 SSH가 버벅이기 시작했다. 이대로는 언제 OOM 킬러가 자바를 죽여도 이상하지 않겠다 싶어서 몇 가지 했다.

1. 스왑부터

fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo "/swapfile none swap sw 0 0" >> /etc/fstab

스왑으로 빠지면 느려지긴 하지만 죽는 것보단 낫다. 지금도 평소에 200MB 정도는 스왑에 가 있다.

2. 힙 크기를 정해 준다

JVM은 따로 안 정하면 물리 메모리의 1/4을 최대 힙으로 잡는다. 765MB면 190MB 정도라 JPA까지 올리기엔 빠듯하다. 스왑을 믿고 조금 넉넉하게 명시했다.

-Xmx384m -XX:+UseSerialGC

SerialGC는 힙이 작을 때 G1보다 메모리를 덜 먹는다. 사용자가 나 혼자인 블로그라 GC 멈춤 시간은 신경 안 써도 된다.

3. 안 쓰는 것 정리

서버 이미지에 기본으로 깔린 게 꽤 많았다. 가상 서버라 필요 없는 linux-firmware만 600MB가 넘었고, 쓰지도 않는 Java 8도 깔려 있었다. 디스크가 9GB라 이것도 정리했다.

dnf remove linux-firmware java-1.8.0-openjdk-headless
dnf clean all

지우기 전에 dnf remove --assumeno 패키지명으로 같이 지워지는 게 있는지 먼저 보는 게 안전하다. gcc 같은 건 딸려 나가는 게 많아서 그냥 뒀다.

지금 상태

스프링이 뜨는 데 20초 조금 넘게 걸린다. 빠르진 않지만 한 번 뜨면 페이지 응답은 문제없다. 글이 많아지거나 방문자가 늘면 그때 서버 사양을 올리면 된다.