게임 렉 백서 › 증상별로 찾기
접속 끊김: 원인 51가지와 담당
다른 말: 튕김, 연결 끊김, 서버와의 연결이 끊어졌습니다
그림이 있는 원본 증상 사전으로 열기 →
게임 중에 연결이 끊어져 로그인 화면이나 재접속 창으로 돌아갑니다.
멈춤이 몇 초 이어지다 “연결이 끊어졌습니다” 안내. 여러 명이 동시에 끊기면 서버 쪽 문제입니다.
타임아웃 시간 안에 패킷이 하나도 오지 않았습니다. 긴 회선 끊김, 유휴 타임아웃, 서버 크래시·재시작, 타임아웃보다 오래 멈춘 서버나 내 PC(긴 로딩)를 봅니다. 안내 없이 게임 자체가 꺼졌다면 연결보다 클라이언트 강제 종료(크래시, 메모리 부족)를 먼저 봅니다.
이 증상을 만드는 원인
L1 클라이언트 게임 프로세스
- 클라이언트 메모리 누수: 오래 켜 둘수록 메모리가 늘어 점점 느려지다가 결국 게임이 강제로 꺼집니다. (게임개발팀·클라이언트 개발)
- 클라이언트 크래시: 처리하지 못한 오류로 게임이 꺼집니다. 플레이어에게는 접속 끊김처럼 보이지만 서버는 정상입니다. (게임개발팀·클라이언트 개발)
- 게임 보안 모듈(안티치트) 검사: 해킹을 막으려고 게임과 함께 도는 보안 모듈이 주기적으로 검사합니다. 검사가 무겁거나 보안 서버와 주고받는 하트비트(주기적인 생존 확인 신호)가 늦으면 뚝뚝 끊기거나 접속이 끊깁니다. (게임개발팀·클라이언트 개발)
L2 클라이언트 OS·기기
- 모바일 앱 백그라운드 전환: 알림을 보려고 앱을 잠깐 내리면 OS가 몇 초 뒤 앱을 일시 정지(suspend)하고, 그동안 서버는 나를 끊습니다. (게임개발팀·클라이언트 개발)
- 와이파이 ↔ LTE·5G 전환: 집 밖으로 나가며 와이파이가 끊기고 LTE·5G로 바뀌면 내 IP 주소가 바뀌어 기존 연결이 무효가 됩니다. (게임개발팀·서버 개발)
- 창 최소화·비활성 시 처리 제한: 다른 창을 보거나 게임을 최소화하면 게임과 윈도우가 전기를 아끼려고 게임을 느리게 돌립니다. 돌아오면 밀린 패킷이 몰려오거나, 이미 접속이 끊겨 있습니다. (게임개발팀·클라이언트 개발)
- 오버레이 프로그램 간섭: 메신저·런처·녹화·FPS 표시 프로그램이 게임 화면 위에 자기 UI를 덧그리려고 게임의 렌더링 과정에 끼어듭니다(후킹). 프레임마다 작업이 늘고 가끔 게임과 부딪혀 멈칫하거나 게임이 강제로 꺼집니다. (외부·외부)
L3 집 네트워크
- NAT 매핑 만료: 공유기는 한동안 패킷이 오가지 않은 유휴 연결을 NAT 테이블에서 지웁니다. 가만히 있다가 움직이는 순간 접속이 끊기는 흔한 원인입니다. (게임개발팀·클라이언트 개발)
- 공유기 성능 부족·과열: 값싼 공유기에 기기 수십 대, 연결 수천 개가 몰리면 공유기 자체가 처리를 못 합니다. (외부·외부)
- 기지국 핸드오버 (이동 중): 버스·지하철로 이동하면 기지국이 바뀌는 동안 통신이 끊깁니다. (외부·외부)
- 모바일 신호 약함·음영 지역: 엘리베이터·지하·건물 안쪽에서는 재전송이 늘고 속도가 떨어지며 결국 접속이 끊깁니다. (외부·외부)
L4 인터넷 회선
- 국가·통신사 단위 UDP 제한·패킷 검사: 일부 망은 특정 UDP 주소·포트를 막거나 UDP 속도를 제한하고 패킷 검사 장비가 알아보지 못하는 프로토콜을 걸러 냅니다. UDP로 통신하는 게임은 그 망에서 접속이 안 되거나 자주 끊깁니다. (외부·외부)
- 회선 품질 불량: 단자 접촉 불량이나 낡은 선, 모뎀 이상은 꾸준한 손실과 주기적인 회선 끊김을 만듭니다. (외부·외부)
- DDoS로 인한 공유 회선 포화: 게임사나 같은 망의 다른 곳을 향한 대량 공격이 공유 회선을 가득 채웁니다. (인프라팀·네트워크 인프라)
- 통신사 공유 IP (CGNAT): 모바일망과 일부 통신사는 여러 가입자가 IP 하나를 나눠 쓰며 유휴 연결의 매핑을 짧은 시간 안에 지웁니다. (게임개발팀·클라이언트 개발)
L5 데이터센터 네트워크 장비
- 방화벽 세션 테이블 포화: 방화벽은 통과시킨 모든 연결을 세션 테이블에 기록해 추적합니다. 테이블이 다 차면 새 연결을 받을 수 없습니다. (인프라팀·네트워크 인프라)
- 로드밸런서 유휴 타임아웃: 로드밸런서는 유휴 연결을 일정 시간 뒤 지웁니다. 게임은 연결이 유지된다고 여기다가 접속이 끊깁니다. (인프라팀·네트워크 인프라)
- 클라우드 보안 그룹의 연결 추적 만료: 클라우드 서버에 붙은 방화벽(보안 그룹)도 연결을 추적하고 유휴 연결의 추적 항목은 정해진 시간 뒤 만료됩니다. 로드밸런서 없이 바로 붙는 서버에서도 가만히 있던 플레이어의 접속이 끊길 수 있습니다. (인프라팀·서버 인프라)
- 네트워크 장비 장애 전환(페일오버): 라우터·방화벽 한 대가 고장 나 예비 장비로 전환(페일오버)되는 몇 초 동안 모두가 멈춥니다. (인프라팀·네트워크 인프라)
- MTU 불일치 (큰 패킷만 사라짐): 중간 구간의 MTU(한 번에 보낼 수 있는 크기)가 줄었는데 크기 초과 알림이 막히면, 큰 패킷만 계속 사라집니다. (인프라팀·네트워크 인프라)
L6 서버 네트워크 카드
- 클라우드 호스트 점검·라이브 마이그레이션: 클라우드 사업자가 물리 서버(호스트)를 점검할 때 가상 머신을 다른 호스트로 옮기거나(라이브 마이그레이션) 잠시 멈춥니다. 그동안 서버 전체가 멈추고 멈춘 시간이 길면 연결이 끊깁니다. (인프라팀·서버 인프라)
- NIC 드라이버·펌웨어 문제: 드라이버 버그나 기능 오동작으로 카드가 멈춰 재시작되는 동안 모든 송수신이 끊깁니다. (인프라팀·서버 인프라)
L7 서버 OS (커널)
- OOM 킬러: 리눅스는 메모리가 바닥나면 메모리를 가장 많이 쓰는 프로세스를 골라 강제로 죽입니다. 대개 게임 서버입니다. (게임개발팀·서버 개발)
- 시스템 시계 점프 (NTP 스텝): 서버 시계가 한 번에 몇 초 앞뒤로 조정되면 시스템 시계에 의존하는 타이머가 한꺼번에 발동하거나 멈춥니다. (게임개발팀·서버 개발)
L8 소켓과 프로토콜
- TCP RTO와 지수 백오프: 재전송이 또 실패할 때마다 기다리는 시간이 두 배로 늘어, 짧은 회선 끊김이 긴 멈춤이 됩니다. (게임개발팀·서버 개발)
- 느린 클라이언트(slow consumer) 처리 정책: 보낼 게 계속 쌓이는 클라이언트에게 서버가 오래된 업데이트를 버리거나 연결을 끊습니다. (게임개발팀·서버 개발)
- RST 강제 종료로 마지막 데이터 유실: 서버가 연결을 급히 끊으면 마지막으로 보낸 안내나 저장 완료 신호가 사라집니다. (게임개발팀·서버 개발)
- SO_REUSEPORT 분배 쏠림: 같은 포트를 여러 프로세스가 나눠 받으면, 커널은 접속마다 주소 해시로 담당 프로세스를 정해 두고 바꾸지 않습니다. 담당 프로세스 하나가 멈추면 거기에 배정된 사람만 기다립니다. (게임개발팀·서버 개발)
- 윈도우 UDP 소켓의 WSAECONNRESET 오류: 윈도우 서버가 이미 떠난 클라이언트에게 UDP를 보내면 “포트 없음”(ICMP) 알림이 돌아옵니다. 그 알림 때문에 다음 수신 호출이 오류로 끝나는데 서버 코드가 이 오류를 소켓 자체의 고장으로 처리하면 그 소켓을 쓰는 모두가 영향을 받습니다. (게임개발팀·서버 개발)
L9 서버 게임 프로세스
- 데드락: 두 스레드가 서로 상대가 잡은 락을 기다리면 영원히 멈춥니다. (게임개발팀·서버 개발)
- 서버 크래시: 처리하지 못한 오류로 서버 프로세스가 죽으면, 그 서버에 있던 모두의 접속이 동시에 끊깁니다. (게임개발팀·서버 개발)
- 무한 루프·로직 폭주: 버그로 한 틱이 끝나지 않으면 서버가 멈추고 워치독이 강제로 재시작합니다. (게임개발팀·서버 개발)
L10 메모리
- 메모리 누수: 해제되지 않는 메모리가 조금씩 쌓이면 며칠 뒤 GC 폭주·스왑·강제 종료가 일어납니다. (게임개발팀·서버 개발)
- GC 스래싱 (힙 여유 부족): 살아 있는 데이터가 힙 한도에 가까워지면, GC가 돌아도 회수할 것이 거의 없어 GC가 쉬지 않고 반복됩니다. (게임개발팀·서버 개발)
- 메모리 단편화: 할당과 해제를 반복해 빈 공간이 잘게 쪼개지면, 실제로 쓰는 양보다 훨씬 많은 메모리를 점유합니다. (게임개발팀·서버 개발)
L11 디스크
- 디스크 가득 참: 로그와 덤프가 쌓여 디스크가 가득 차면 쓰기가 실패하고 대비가 없으면 서버가 죽습니다. (인프라팀·서버 인프라)
L12 데이터베이스
- DB 장애 전환: 주 DB가 죽어 예비 DB로 전환되는 동안 쓰기가 안 되고 복제되지 못한 마지막 데이터는 사라질 수 있습니다. (인프라팀·DB 인프라)
L13 서버 구성과 운영
- 게이트웨이·프록시 경유: 클라이언트와 게임 서버 사이에 중간 서버를 두면, 한 번 거칠 때마다 처리 시간이 붙고 그 서버가 단일 장애 지점이 됩니다. (게임개발팀·서버 개발)
- 존 이동 (서버 간 이관): 다른 지역·던전에 들어갈 때 캐릭터 정보를 다른 서버로 넘기는 과정에서 지연과 실패가 생깁니다. (게임개발팀·서버 개발)
- 배포·재시작: 업데이트하려고 서버를 재시작할 때 연결을 옮기지 않으면 그 서버에 있던 사람들의 접속이 끊기고, 종료 직전 저장과 재접속이 한꺼번에 몰립니다. (게임개발팀·서버 개발)
- 로그인 대기열 상한·재접속 유예 부족: 출시·점검 직후 접속이 몰리면 로그인 대기열이 상한에 닿아 새 대기를 거절하고, 기다리던 유저는 잠깐 끊긴 사이 자리를 잃어 맨 뒤로 돌아갑니다. (게임개발팀·서버 개발)
동기화 설계
- 호스트(방장) 구조: 한 플레이어의 PC가 서버 역할을 하면, 그 사람의 회선과 PC 성능이 모두의 체감을 정합니다. (게임개발팀·서버 개발)
일부에게만 생기는 문제
- 특정 통신사 사용자에게 몰리는 검증 오탐: 지터가 큰 회선을 쓰는 사람들은 입력이 몰려 도착해서 서버의 속도·쿨타임 검사에 자주 걸립니다. (게임개발팀·서버 개발)
- 고정 UDP 포트 충돌: 클라이언트가 정해진 로컬 포트를 쓰도록 만들어져 있으면, 같은 PC의 두 번째 클라이언트는 포트를 못 쓰거나 첫 번째와 패킷을 나눠 받습니다. (게임개발팀·클라이언트 개발)
- IP·기기 기준 세션 구분 버그: 서버나 중간 서버가 연결을 IP나 기기 ID로 구분하면, 같은 PC(같은 공인 IP)의 두 클라이언트를 한 사람으로 인식합니다. (게임개발팀·서버 개발)
- 멀티 클라이언트 제한: 보안 모듈이나 서버 정책이 한 PC의 여러 클라이언트를 제한하면, 두 번째 클라이언트는 실행·접속이 막히거나 먼저 켠 쪽의 접속이 끊깁니다. 일부 게임은 추가 클라이언트의 기능만 막습니다. (게임개발팀·클라이언트 개발)
- 백그라운드 창의 처리 제한: 클라이언트 창이 백그라운드에 있으면 게임·엔진·OS가 그 클라이언트의 프레임과 처리를 줄입니다. 받은 패킷을 제때 처리하지 못해 밀리거나 넘칩니다. (게임개발팀·클라이언트 개발)
TCP 재전송의 근본 원인
- 방화벽·연결 추적의 폐기: 방화벽이나 리눅스 연결 추적(conntrack, 지나가는 연결을 테이블에 기록하는 기능)은 테이블이 가득 차거나, 연결 상태가 맞지 않는다고 판단하면 패킷을 버립니다. (인프라팀·네트워크 인프라)
- 중간 장비 처리 한도 초과 (방화벽·IPS·DDoS 방어): 방화벽, 침입 방지 장비(IPS), DDoS 방어 장비는 지나가는 패킷을 하나하나 검사합니다. 검사 능력을 넘는 순간부터 처리하지 못한 패킷을 버립니다. (인프라팀·네트워크 인프라)
- MTU 블랙홀 (큰 패킷만 반복 손실): 중간 구간이 받을 수 있는 크기가 작아졌는데 “너무 크다”는 알림(ICMP)이 막히면, 큰 패킷은 몇 번을 다시 보내도 계속 사라집니다. (인프라팀·네트워크 인프라)
- 연결 도중 NAT·로드밸런서 매핑 만료: 유휴 연결의 매핑(이 연결을 어디로 전달할지 기록한 항목)을 중간 장비가 지우면, 다음에 보내는 패킷은 전달되지 못합니다. 재전송만 반복하다 접속이 끊기거나, 장비가 연결 거부(RST)를 돌려보내 곧바로 끊깁니다. (게임개발팀·클라이언트 개발)
그림이 있는 원본 증상 사전 보기