게임 렉 백서 › 증상별로 찾기
슬로우모션: 원인 24가지와 담당
다른 말: 세계가 느려짐, 전체적으로 굼뜸
그림이 있는 원본 증상 사전으로 열기 →
모든 것이 느리게 움직입니다. 스킬 시전과 몬스터 이동이 늘어진 것처럼 보입니다. 서버 설계에 따라서는 속도는 그대로인 채 뚝뚝 끊김·순간이동으로 나타나기도 합니다.
같은 지역의 모두가 함께 느려집니다. 대개 사람이 많이 모인 곳에서 생깁니다.
서버가 틱을 제시간에 끝내지 못합니다. 회선은 멀쩡하니 게임 밖에서 잰 핑은 그대로이고 게임 안 핑은 서버 처리 대기가 섞여 있으면 조금 오를 수 있습니다. 인원 폭증, 시야 계산, 브로드캐스트, 메모리 부족을 봅니다.
이 증상을 만드는 원인
L1 클라이언트 게임 프로세스
- 고정 타임스텝 따라잡기 폭주: 한 번 멈춘 뒤 밀린 계산을 몰아서 하다가, 그 계산 때문에 또 밀립니다. (게임개발팀·클라이언트 개발)
L5 데이터센터 네트워크 장비
- 로드밸런서 쏠림·헬스체크 오판: 로드밸런서가 한 서버에만 연결을 몰아주거나, 이미 죽은 서버로 계속 사람을 보냅니다. (인프라팀·네트워크 인프라)
L7 서버 OS (커널)
- 스레드 과다와 컨텍스트 스위칭: 코어보다 훨씬 많은 스레드를 돌리면 OS가 번갈아 실행시키는 데만 CPU를 씁니다. (게임개발팀·서버 개발)
- 컨테이너 CPU 스로틀링 (CFS 쿼터): 컨테이너에 CPU 한도를 걸면, 정해진 주기(보통 100ms) 안에 할당량을 다 쓴 순간 남은 시간 동안 강제로 멈춥니다(스로틀링). (인프라팀·서버 인프라)
- 서버 전원 관리(C-state·주파수 조절)로 지연 튐: 쉬는 CPU 코어는 전기를 아끼려고 깊은 절전 상태(C-state)로 들어가고 주파수도 낮춥니다. 패킷이나 타이머가 오면 깨어나고 주파수를 올리는 데 시간이 걸려, 작은 패킷 처리에 지연이 더해집니다. (인프라팀·서버 인프라)
- 예약 작업: 매일 같은 시각에 도는 로그 압축·백업·보안 검사가 CPU와 디스크를 차지합니다. (인프라팀·서버 인프라)
- OS·커널·드라이버·펌웨어 업데이트 뒤 성능 변화: 게임 코드는 그대로인데 서버 OS·커널·드라이버·펌웨어를 업데이트한 뒤부터 서버가 느려집니다. 업데이트로 기본값, 스케줄러, CPU 취약점 완화(mitigations), 드라이버 동작이 바뀌기도 합니다. (인프라팀·서버 인프라)
L8 소켓과 프로토콜
- 느린 클라이언트로 인한 블로킹 전송: 회선이 느린 한 명의 송신 버퍼가 가득 찼는데 블로킹 방식(버퍼에 여유가 생길 때까지 호출이 반환되지 않는 전송)으로 보내면, 서버 스레드가 그 한 명을 기다립니다. (게임개발팀·서버 개발)
- 블로킹 I/O 구조: 소켓 하나를 기다리는 동안 스레드가 다른 일을 못 하는 구조에서는 사람이 늘수록 전체가 느려집니다. (게임개발팀·서버 개발)
L9 서버 게임 프로세스
- 틱 예산 초과: 한 틱 안에 할 일이 예산을 넘으면 서버의 틱 주기가 늘어지고 그 지역 전체가 느리게 흐르거나 뚝뚝 끊깁니다. (게임개발팀·서버 개발)
- 시야(AOI) 계산 폭증 (N²): 누가 누구를 볼 수 있는지 모두끼리 비교하면, 인원이 10배가 될 때 계산은 100배가 됩니다. (게임개발팀·서버 개발)
- 단일 스레드 지역 과부하(핫스팟): 지역마다 스레드 하나가 맡는 구조에서 한곳에 사람이 몰리면 그 코어 하나만 100%가 됩니다. (게임개발팀·서버 개발)
- 길찾기 폭주: 수백 마리 몬스터가 동시에 플레이어를 쫓으며 경로를 계산하면 CPU를 크게 씁니다. (게임개발팀·서버 개발)
- 한 대상에 몰린 전투 (월드 보스): 수백 명이 보스 하나를 동시에 때리면, 보스 한 마리의 계산이 한곳에 몰리고 타격 정보가 보는 모두에게 전송됩니다. (게임개발팀·서버 개발)
- 개체 누적 (정리되지 않은 아이템·소환물): 사라져야 할 바닥 아이템, 소환물, 끝난 타이머가 정리되지 않고 쌓이면, 서버를 오래 켜 둘수록 매 틱 할 일이 늘어납니다. (게임개발팀·서버 개발)
L10 메모리
- 메모리 누수: 해제되지 않는 메모리가 조금씩 쌓이면 며칠 뒤 GC 폭주·스왑·강제 종료가 일어납니다. (게임개발팀·서버 개발)
- GC 스래싱 (힙 여유 부족): 살아 있는 데이터가 힙 한도에 가까워지면, GC가 돌아도 회수할 것이 거의 없어 GC가 쉬지 않고 반복됩니다. (게임개발팀·서버 개발)
- 스왑: 메모리가 모자라 OS가 일부를 디스크로 내보내면, 그 메모리를 쓸 때마다 1,000배 넘게 느린 디스크를 기다립니다. (인프라팀·서버 인프라)
- 캐시 미스: 데이터가 메모리 여기저기 흩어져 있으면 CPU가 매번 느린 RAM까지 가서 기다립니다. (게임개발팀·서버 개발)
- 메모리 단편화: 할당과 해제를 반복해 빈 공간이 잘게 쪼개지면, 실제로 쓰는 양보다 훨씬 많은 메모리를 점유합니다. (게임개발팀·서버 개발)
- NUMA 원격 메모리: CPU가 두 개인 서버에서 반대편 CPU에 붙은 메모리를 쓰면 접근이 느려집니다. (인프라팀·서버 인프라)
L11 디스크
- 클라우드 디스크 버스트 크레딧 소진: 일부 클라우드 디스크와 작은 서버 사양은 잠깐 기준보다 빠르게 쓸 수 있는 버스트 크레딧이 있어서, 바쁜 시간이 길어져 크레딧이 바닥나면 속도가 갑자기 떨어집니다. (인프라팀·서버 인프라)
L13 서버 구성과 운영
- 오토스케일링 지연: 사람이 몰리면 서버를 자동으로 늘리지만 준비에 몇 분이 걸리고 그동안 기존 서버가 과부하입니다. (인프라팀·서버 인프라)
- 매크로·봇 과다: 봇은 사람보다 훨씬 자주 요청을 보내 서버 처리량을 잠식합니다. (게임개발팀·서버 개발)
그림이 있는 원본 증상 사전 보기