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

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

무한 루프·로직 폭주 Infinite loop / runaway logic

원인 ID sp-infinite-loop · 주 담당 게임개발팀·서버 개발

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

버그로 한 틱이 끝나지 않으면 서버가 멈추고 워치독이 강제로 재시작합니다.

왜 잘못된 조건으로 반복이 끝나지 않거나 재귀 폭주 → 그러면 틱이 끝나지 않아 서버 정지 → 화면에서는 멈춤 후 전원 접속 끊김

증상
멈춤, 접속 끊김
요인
정체
누가 겪나
특정 장소·채널, 서버 전체
언제
특정 행동을 할 때, 가끔 무작위로
담당
주 담당 게임개발팀·서버 개발
게임개발팀 할 일
반복 상한, 워치독, 문제 입력 재현 테스트.
그래프에서는
연결이 한꺼번에 끊김 · 접속 수, 스레드별 CPU
확인할 곳
멈춘 동안 pidstat -t 1로 스레드별 CPU를 보고 100%로 도는 스레드가 어느 함수에서 도는지 perf top -t(스레드 ID)나 gdb로 확인. 이미 재시작됐다면 워치독 시간 초과 기록(systemd의 WatchdogSec, 쿠버네티스 라이브니스 검사 실패)
이러면 맞음
서버가 멈춘 동안 게임 스레드 하나가 CPU 100%로 붙어 있고 스택이 같은 함수·반복문 안에서 계속 돎
이러면 아님
멈춘 동안 CPU가 0에 가까우면 데드락이나 외부 응답 대기 쪽
확인 수단
인프라 도구로 확인(게임 코드 불필요)

출처

  1. systemd.service(5) — Linux manual page systemd
    WatchdogSec=: 서비스가 정한 시간 안에 살아 있다는 신호(WATCHDOG=1)를 보내지 않으면 실패로 보고 종료, Restart= 설정에 따라 자동 재시작
  2. Liveness, Readiness, and Startup Probes Kubernetes
    실행 중이지만 진행하지 못하는 상태를 라이브니스 검사로 잡아 재시작, 기본은 10초마다 검사해 3번 연속 실패하면 재시작
  3. pidstat(1) — Linux manual page sysstat
    -t로 프로세스에 속한 스레드별 통계(CPU 사용률 등)를 함께 표시
  4. perf-top(1) — Linux manual page perf
    실행 중인 스레드(-t)나 프로세스(-p)의 CPU 사용 비중을 함수(심볼)별로 실시간 표시

함께 보면 좋은 원인

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

같은 증상(멈춤)의 다른 층 원인

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