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

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

메모리 회수·컴팩션으로 인한 멈춤 Memory compaction / reclaim stalls (THP)

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

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

OS가 큰 페이지(huge page)를 만들려고 메모리를 컴팩션하거나 여유 메모리를 회수하는 동안 프로세스가 멈춥니다.

왜 여유 메모리가 줄거나 큰 페이지 기능(THP)이 메모리 컴팩션 실행 → 그러면 메모리를 요청한 스레드가 회수·컴팩션이 끝날 때까지 대기 → 화면에서는 불규칙한 서버 멈춤(수 ms~수백 ms)

증상
멈춤, 뚝뚝 끊김
요인
정체
누가 겪나
서버 전체
언제
오래 켜 둘수록, 가끔 무작위로
담당
주 담당 인프라팀·서버 인프라 · 함께 게임개발팀·서버 개발
게임개발팀 할 일
실행 중 큰 메모리 할당 줄이기(시작할 때 미리 확보해 재사용).
인프라팀 할 일
큰 페이지(THP)는 필요한 곳에만 쓰게(madvise) 설정, 여유 메모리 기준 높이기(vm.min_free_kbytes 등).
그래프에서는
가끔 무작위로 튐 · 서버 틱 시간, 메모리 PSI
확인할 곳
/proc/pressure/memory의 some·full(메모리를 기다리며 멈춘 시간 비율)과 /proc/vmstat의 compact_stall 증가량을 서버 틱 시간과 함께 보고, /sys/kernel/mm/transparent_hugepage/defrag 설정을 확인
이러면 맞음
틱이 튄 시각에 메모리 PSI가 오르고 compact_stall이 늘어남. defrag가 always
이러면 아님
PSI와 compact_stall이 그대로면 이 원인이 아님. 스왑 사용이 늘면 “스왑”
확인 수단
인프라 도구로 확인(게임 코드 불필요)

출처

  1. Transparent Hugepage Support Linux kernel
    defrag=always면 THP 할당에 실패할 때 그 자리에서 메모리 회수·컴팩션을 하며 멈춤, madvise는 요청한 영역만 그렇게 함
  2. Documentation for /proc/sys/vm/ Linux kernel
    min_free_kbytes: 커널이 남겨 둘 최소 여유 메모리(워터마크) 기준
  3. PSI - Pressure Stall Information Linux kernel
    /proc/pressure/memory의 some(일부 작업이 메모리를 기다리며 멈춘 시간 비율)·full(모든 작업이 멈춘 시간 비율)

함께 보면 좋은 원인

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

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

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