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

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

OOM 킬러 Out-of-memory killer

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

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

리눅스는 메모리가 바닥나면 메모리를 가장 많이 쓰는 프로세스를 골라 강제로 죽입니다. 대개 게임 서버입니다.

왜 누수나 폭증으로 메모리 고갈, 또는 컨테이너 메모리 한도 도달 → 그러면 커널이 게임 서버 프로세스를 강제 종료 → 화면에서는 그 서버의 모두가 동시에 접속 끊김, 최근 진행 롤백 가능

증상
접속 끊김, 씹힘·롤백
요인
정체
누가 겪나
서버 전체
언제
오래 켜 둘수록, 사람이 몰릴 때
담당
주 담당 게임개발팀·서버 개발 · 함께 인프라팀·서버 인프라
게임개발팀 할 일
누수 수정, 메모리 사용 상한을 두고 가까워지면 저장 후 정상 종료하는 절차.
인프라팀 할 일
메모리 경보, 컨테이너 메모리 한도를 실제 사용량에 맞게 설정, 먼저 죽일 순서 조정(oom_score_adj).
수치 감각
커널 로그(dmesg)에 “Out of memory: Killed process”가 남고 쿠버네티스에서는 OOMKilled로 표시됩니다. 윈도우에는 OOM 킬러가 없고 메모리 할당이 실패하면서 서버가 오류로 죽는 경우가 많습니다.
그래프에서는
연결이 한꺼번에 끊김 · 접속 수, 메모리 사용량
확인할 곳
dmesg의 “Out of memory: Killed process” 기록, 쿠버네티스면 파드 상태의 OOMKilled, cgroup v2면 memory.events의 oom_kill 증가를 접속이 끊긴 시각과 맞춰 봄
이러면 맞음
접속이 한꺼번에 끊긴 시각에 게임 서버 프로세스를 죽인 기록이 있고 그 직전까지 메모리 사용량이 한도로 올라감
이러면 아님
OOM 기록이 없는데 프로세스가 죽었으면 “서버 크래시”의 크래시 로그·코어 덤프를 봄
확인 수단
인프라 도구로 확인(게임 코드 불필요)

출처

  1. mm/oom_kill.c (Linux v6.12) Linux kernel
    메모리를 가장 많이 쓰는 프로세스가 가장 높은 점수를 받도록 계산(oom_score_adj 반영), 종료할 때 “Out of memory: Killed process …” 기록
  2. Assign Memory Resources to Containers and Pods Kubernetes
    컨테이너가 메모리 limit을 넘어 계속 쓰면 종료되고 상태가 OOMKilled로 표시됨
  3. Pushing the Limits of Windows: Virtual Memory Microsoft
    윈도우는 커밋 한도에 닿으면 메모리를 확정하는 할당이 실패하고 앱 오류나 시스템 장애로 이어질 수 있음
  4. Control Group v2 Linux kernel
    memory.events의 oom_kill: 이 cgroup에서 OOM 킬러가 죽인 프로세스 수

함께 보면 좋은 원인

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

같은 증상(접속 끊김)의 다른 층 원인

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