한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

게임 렉 백서 › L1 클라이언트 게임 프로세스

메인 스레드 패킷 처리 병목 Network processing on the main thread

원인 ID cg-net-mainthread · 주 담당 게임개발팀·클라이언트 개발 · 함께 게임개발팀·서버 개발

그림과 실험이 있는 원본 카드로 열기 →

받은 패킷을 프레임마다 정해진 만큼만 처리하면, 몰려온 패킷이 다음 프레임으로 계속 밀립니다.

왜 사람 많은 곳에서 초당 수천 개의 업데이트가 도착 → 그러면 메인 스레드가 프레임당 처리량 제한에 걸려 다 못 읽음 → 화면에서는 다른 사람 움직임이 점점 늦게, 몰아서 반영

증상
몰아치기, 입력 지연
요인
정체, 지연
누가 겪나
특정 장소·채널, 나만
언제
사람이 몰릴 때
담당
주 담당 게임개발팀·클라이언트 개발 · 함께 게임개발팀·서버 개발
게임개발팀 할 일
클라이언트: 수신·해석은 별도 스레드, 같은 대상의 오래된 위치 업데이트는 합쳐서 최신만 적용. 서버: 사람 많은 곳에서는 먼 캐릭터의 업데이트를 덜 자주 보내 전송량 줄이기.
수치 감각
처리 못 한 패킷이 쌓이면 1초 분량이 밀리는 데 몇 초면 충분합니다.
그래프에서는
인원·부하를 따라 오름 · 처리 못 한 수신 패킷 수, 수신~적용 지연
확인할 곳
클라이언트가 프레임마다 처리하지 못하고 남긴 패킷 수와, 패킷이 도착한 시각부터 게임에 적용한 시각까지의 지연을 로그로 남겨 주변 인원과 함께 봄
이러면 맞음
사람 많은 곳에서 남은 패킷 수와 적용 지연이 계속 늘고 같은 시각 핑과 서버의 송신 간격은 정상임
이러면 아님
적용 지연은 없는데 패킷 자체가 늦게 도착하면 네트워크 구간. 프레임 시간이 크게 오르면 “대규모 인원 렌더링 부하”
확인 수단
게임 서버·클라이언트의 로그·지표가 필요

출처

  1. Actor Priority in Unreal Engine Epic Games
    대역폭이 모자라면 모든 액터를 매번 복제하지 않고 보는 사람과의 거리·마지막 복제 후 시간으로 우선순위를 매김
  2. Replication Graph in Unreal Engine Epic Games
    접속자·복제 대상이 많은 게임(MMORPG 등)은 위치별로 묶어 필요한 대상만 보내야 서버 CPU 병목을 피함

함께 보면 좋은 원인

같은 층: L1 클라이언트 게임 프로세스

같은 증상(몰아치기)의 다른 층 원인

그림과 실험이 있는 원본 카드 보기