게임 렉 백서 › L1 클라이언트 게임 프로세스
클라이언트 메모리 누수 Client memory leak
원인 ID cg-leak · 주 담당 게임개발팀·클라이언트 개발
그림과 실험이 있는 원본 카드로 열기 →
오래 켜 둘수록 메모리가 늘어 점점 느려지다가 결국 게임이 강제로 꺼집니다.
왜 지역을 오갈 때 텍스처·UI·이펙트가 해제되지 않음 → 그러면 GC가 잦아지고 OS 메모리가 부족해 스왑 발생 → 화면에서는 몇 시간 플레이 뒤 점점 뚝뚝 끊기다가 강제 종료(플레이어에게는 접속 끊김처럼 보임)
- 증상
- 뚝뚝 끊김, 접속 끊김
- 요인
- 정체
- 누가 겪나
- 나만
- 언제
- 오래 켜 둘수록
- 담당
- 주 담당 게임개발팀·클라이언트 개발
- 게임개발팀 할 일
- 지역 전환 때 메모리 사용량 측정, 해제되지 않는 텍스처·UI·이펙트 찾아 고치기, 장시간 자동 테스트(소크 테스트).
- 그래프에서는
- 서서히 오름 · 게임 프로세스 메모리
- 확인할 곳
- 성능 모니터로 Process(게임)\Private Bytes를 몇 시간 기록. 모바일은 안드로이드 ApplicationExitInfo의 종료 사유(REASON_LOW_MEMORY)와 iOS jetsam 보고서
- 이러면 맞음
- 지역을 오갈 때마다 메모리가 올라가고 내려오지 않으며 켜 둔 시간이 길수록 뚝뚝 끊김·강제 종료가 늘어남
- 이러면 아님
- 메모리는 일정한데 오래 켜 둘수록 떨리기만 하면 “float 시간 정밀도 손실”
- 확인 수단
- 유저 쪽 환경에서 확인
- 더 알아보기
- 폰은 주로 메모리를 압축해 버팁니다. 그래도 메모리가 모자라면 OS가 게임을 바로 꺼 버립니다(튕김). 램이 작은 기기일수록 먼저 꺼집니다.
출처
- Memory allocation among processes Android (Google)
안드로이드는 메모리를 zRAM에 압축해 버티고 모자라면 저메모리 킬러가 프로세스를 종료, 앞에 띄운 앱이 종료되면 크래시처럼 보임 - Identifying high-memory use with jetsam event reports Apple
iOS는 메모리 압박이 풀리지 않으면 앱을 강제 종료(jetsam)하고 앱마다 메모리 한도를 넘으면 종료 대상이 됨 - Find user-mode memory leaks with Performance Monitor (PerfMon) Microsoft
Process > Private Bytes(프로세스가 할당한 전용 메모리)·Virtual Bytes를 오래 기록해 늘기만 하면 누수 - ApplicationExitInfo Android (Google)
REASON_LOW_MEMORY: 시스템의 저메모리 킬러가 앱 프로세스를 종료함(지원하지 않는 기기는 REASON_SIGNALED·SIGKILL로 보고)
함께 보면 좋은 원인
같은 층: L1 클라이언트 게임 프로세스
같은 증상(뚝뚝 끊김)의 다른 층 원인
그림과 실험이 있는 원본 카드 보기