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

게임 렉 백서 › L1 클라이언트 게임 프로세스

클라이언트 메모리 누수 Client memory leak

원인 ID cg-leak · 주 담당 게임개발팀·클라이언트 개발

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

오래 켜 둘수록 메모리가 늘어 점점 느려지다가 결국 게임이 강제로 꺼집니다.

왜 지역을 오갈 때 텍스처·UI·이펙트가 해제되지 않음 → 그러면 GC가 잦아지고 OS 메모리가 부족해 스왑 발생 → 화면에서는 몇 시간 플레이 뒤 점점 뚝뚝 끊기다가 강제 종료(플레이어에게는 접속 끊김처럼 보임)

증상
뚝뚝 끊김, 접속 끊김
요인
정체
누가 겪나
나만
언제
오래 켜 둘수록
담당
주 담당 게임개발팀·클라이언트 개발
게임개발팀 할 일
지역 전환 때 메모리 사용량 측정, 해제되지 않는 텍스처·UI·이펙트 찾아 고치기, 장시간 자동 테스트(소크 테스트).
그래프에서는
서서히 오름 · 게임 프로세스 메모리
확인할 곳
성능 모니터로 Process(게임)\Private Bytes를 몇 시간 기록. 모바일은 안드로이드 ApplicationExitInfo의 종료 사유(REASON_LOW_MEMORY)와 iOS jetsam 보고서
이러면 맞음
지역을 오갈 때마다 메모리가 올라가고 내려오지 않으며 켜 둔 시간이 길수록 뚝뚝 끊김·강제 종료가 늘어남
이러면 아님
메모리는 일정한데 오래 켜 둘수록 떨리기만 하면 “float 시간 정밀도 손실”
확인 수단
유저 쪽 환경에서 확인
더 알아보기
폰은 주로 메모리를 압축해 버팁니다. 그래도 메모리가 모자라면 OS가 게임을 바로 꺼 버립니다(튕김). 램이 작은 기기일수록 먼저 꺼집니다.

출처

  1. Memory allocation among processes Android (Google)
    안드로이드는 메모리를 zRAM에 압축해 버티고 모자라면 저메모리 킬러가 프로세스를 종료, 앞에 띄운 앱이 종료되면 크래시처럼 보임
  2. Identifying high-memory use with jetsam event reports Apple
    iOS는 메모리 압박이 풀리지 않으면 앱을 강제 종료(jetsam)하고 앱마다 메모리 한도를 넘으면 종료 대상이 됨
  3. Find user-mode memory leaks with Performance Monitor (PerfMon) Microsoft
    Process > Private Bytes(프로세스가 할당한 전용 메모리)·Virtual Bytes를 오래 기록해 늘기만 하면 누수
  4. ApplicationExitInfo Android (Google)
    REASON_LOW_MEMORY: 시스템의 저메모리 킬러가 앱 프로세스를 종료함(지원하지 않는 기기는 REASON_SIGNALED·SIGKILL로 보고)

함께 보면 좋은 원인

같은 층: L1 클라이언트 게임 프로세스

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

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