게임 서버는 스왑을 쓰지 않도록 설정, 메모리 경보로 대응, 스왑을 끄면 메모리가 모자라는 순간 강제 종료(OOM)되므로 피크 사용량보다 램을 넉넉히 확보.
수치 감각
RAM 읽기 약 100ns, SSD에서 되읽기 약 100µs(1,000배), 네트워크 너머 클라우드 디스크는 약 1ms(1만 배), HDD는 10ms(10만 배).
그래프에서는
서서히 오름 · 스왑 사용량, 스왑 인·아웃
확인할 곳
vmstat 1의 si·so 열(초당 스왑에서 읽어 들인·내보낸 양), /proc/pressure/memory의 some·full(메모리를 기다리느라 멈춘 시간 비율), 게임 서버 프로세스의 pidstat -r majflt/s(디스크에서 읽어 와야 했던 페이지 폴트)를 틱 시간과 겹쳐 봄
이러면 맞음
렉 시각에 si가 0보다 크고 게임 서버의 majflt/s와 memory의 full 값이 함께 오름
이러면 아님
si·so가 0이고 memory 압박(PSI)도 0 근처면 스왑이 원인이 아님. 스왑이 없는데 majflt/s와 PSI가 오르면 메모리가 바닥나 코드 페이지를 다시 읽는 상태라 메모리 확보가 먼저
확인 수단
인프라 도구로 확인(게임 코드 불필요)
더 알아보기
GC를 쓰는 서버는 수집할 때 힙 곳곳을 읽기 때문에, 힙 일부만 스왑돼도 GC 한 번이 수 초~수십 초로 늘어날 수 있습니다. 스왑을 끄면 스왑 때문에 느려지는 단계 없이 강제 종료(OOM)로 넘어가므로, 여유 메모리를 먼저 확보해야 합니다. 스왑이 없어도 메모리가 바닥에 가까우면 OS가 실행 파일의 코드 페이지까지 메모리에서 내렸다가 다시 읽느라, 강제 종료 전에 한동안 서버 전체가 심하게 느려질 수 있습니다.