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

게임 렉 백서 › L7 서버 OS (커널)

서버 conntrack 테이블 포화 conntrack table full

원인 ID so-conntrack · 주 담당 인프라팀·서버 인프라 · 함께 게임개발팀·서버 개발, 게임개발팀·클라이언트 개발

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

리눅스 방화벽이 모든 연결을 기록하는 연결 추적(conntrack) 테이블이 한도에 닿으면 새 패킷을 버립니다.

왜 접속 폭주, 짧은 연결 반복으로 연결 기록 증가 → 그러면 테이블이 가득 차 새 연결과 일부 패킷 폐기 → 화면에서는 접속 불가, 원인 모를 손실로 순간이동

증상
접속 불가·무한 로딩, 순간이동
요인
손실
누가 겪나
서버 전체
언제
접속·점검 직후, 사람이 몰릴 때
담당
주 담당 인프라팀·서버 인프라 · 함께 게임개발팀·서버 개발, 게임개발팀·클라이언트 개발
게임개발팀 할 일
서버: 짧은 연결 줄이기(서버 간 호출은 연결 재사용). 클라이언트: 접속이 실패하거나 끊기면 재시도 간격을 늘려 가며 무작위로 분산.
인프라팀 할 일
테이블 크기(nf_conntrack_max) 늘리기, 게임 포트는 추적 제외(raw 테이블의 NOTRACK), 사용량 경보.
수치 감각
기본 한도는 서버 메모리에 따라 약 6만~26만 개입니다. 넘치면 커널 로그에 “nf_conntrack: table full, dropping packet”이 찍힙니다.
그래프에서는
한도에 닿아 평평해짐 · conntrack 항목 수(nf_conntrack_count)
확인할 곳
sysctl의 net.netfilter.nf_conntrack_count(현재 항목 수)를 nf_conntrack_max와 같은 그래프에 놓고, dmesg에서 “nf_conntrack: table full, dropping packet”을 찾음
이러면 맞음
nf_conntrack_count가 max에서 평평해지고 그 시각부터 커널 로그에 table full이 찍힘
이러면 아님
항목 수가 max에 한참 못 미치면 이 원인이 아님. AWS 인스턴스 자체의 연결 추적 한도는 “클라우드 PPS 한도 초과”의 conntrack_allowance_exceeded로 봄
확인 수단
인프라 도구로 확인(게임 코드 불필요)

출처

  1. Netfilter Conntrack Sysfs variables Linux kernel
    nf_conntrack_max 기본값은 해시 버킷 수(nf_conntrack_buckets)와 같고, 버킷 수는 메모리 크기로 정해짐
  2. net/netfilter/nf_conntrack_core.c (Linux v6.12) Linux kernel
    기본 크기는 메모리 1GB 초과면 65,536, 4GB 초과(64비트)면 262,144, 가득 차면 “nf_conntrack: table full, dropping packet”을 남기고 버림
  3. iptables-extensions(8) — Linux manual page netfilter
    raw 테이블의 CT --notrack으로 연결 추적 제외

함께 보면 좋은 원인

같은 층: L7 서버 OS (커널)

같은 증상(접속 불가·무한 로딩)의 다른 층 원인

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