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

게임 렉 백서 › L9 서버 게임 프로세스

단일 스레드 지역 과부하(핫스팟) Single-threaded hot zone

원인 ID sp-hotzone · 주 담당 게임개발팀·서버 개발 · 함께 인프라팀·서버 인프라

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

지역마다 스레드 하나가 맡는 구조에서 한곳에 사람이 몰리면 그 코어 하나만 100%가 됩니다.

왜 한 지역(채널)을 스레드 하나가 담당 → 그러면 사람이 한곳에 몰리면 그 코어만 포화, 나머지 코어는 여유 → 화면에서는 그 지역만 렉, 다른 지역은 멀쩡

증상
슬로우모션, 입력 지연
요인
정체
누가 겪나
특정 장소·채널
언제
사람이 몰릴 때
담당
주 담당 게임개발팀·서버 개발 · 함께 인프라팀·서버 인프라
게임개발팀 할 일
채널 분산, 지역 내부 병렬화, 인원 상한.
인프라팀 할 일
코어별 CPU 사용률을 모니터링·경보에 추가(서버 전체 평균에는 코어 하나의 포화가 묻힘).
수치 감각
16코어 서버에서 코어 하나가 100%여도 서버 전체 CPU 사용률은 약 6%로 보입니다. 코어별 사용률을 봐야 찾을 수 있습니다.
그래프에서는
인원·부하를 따라 오름 · 코어별 CPU 사용률, 스레드별 CPU
확인할 곳
mpstat -P ALL 1로 코어별 사용률, pidstat -t 1로 게임 프로세스의 스레드별 CPU를 보고 가장 바쁜 스레드가 맡은 존의 인원과 비교
이러면 맞음
서버 전체 CPU는 낮은데 스레드 하나(코어 하나)만 100% 가까이 붙어 있고, 그 시각 그 스레드가 맡은 존에 사람이 몰려 있음
이러면 아님
여러 코어가 고르게 높으면 서버 전체 과부하. 한 코어의 %soft(수신 처리)만 높으면 NIC 인터럽트 단일 코어 집중 쪽
확인 수단
인프라 도구로 확인(게임 코드 불필요)
더 알아보기
지역마다 틱을 따로 돌려야 다른 지역이 멀쩡합니다. 여러 지역 스레드가 매 틱 서로를 기다렸다가 함께 다음 틱으로 넘어가는 구조라면, 가장 바쁜 지역 하나가 서버 전체의 틱을 늦춥니다.
실제 사례
CCP Games 2014: EVE Online HED-GP 대규모 함대전의 서버 과부하

출처

  1. Time Dilation – How’s That Going? CCP Games
    EVE Online의 Time Dilation은 노드 단위라 한 노드에 함께 올라간 먼 성계까지 느려짐, 큰 전투는 성계 4개만 올린 강화 노드에서 처리
  2. mpstat(1) — Linux manual page sysstat
    프로세서별 사용률과 전체 평균을 따로 보여 줌(-P ALL), %soft는 소프트웨어 인터럽트 처리에 쓴 시간 비율
  3. pidstat(1) — Linux manual page sysstat
    -t로 프로세스에 속한 스레드별 통계(CPU 사용률 등)를 함께 표시

함께 보면 좋은 원인

같은 층: L9 서버 게임 프로세스

같은 증상(슬로우모션)의 다른 층 원인

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