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

Анатомия игровых лагов › L1 Процесс игрового клиента

Утечка памяти на клиенте Client memory leak

ID причины cg-leak · Основной ответственный Команда разработки · Разработка клиента

Открыть карточку в основной версии с иллюстрациями и экспериментами →

Чем дольше работает игра, тем больше памяти она занимает, всё сильнее тормозит и в итоге принудительно закрывается.

Почему При переходах между локациями текстуры, UI и эффекты не освобождаются → Следствие GC запускается чаще, памяти ОС не хватает, начинается своп → На экране Через несколько часов игры микрофризы нарастают, потом игра принудительно закрывается (игроку это кажется дисконнектом)

Симптомы
Микрофризы, Дисконнект
Факторы
Остановка
У кого
Только у меня
Когда
Чем дольше без перезапуска
Ответственные
Основной ответственный Команда разработки · Разработка клиента
Команда разработки: задачи
Замерять расход памяти при смене локаций, находить и исправлять неосвобождаемые текстуры, UI и эффекты, гонять долгие автотесты (soak-тесты).
На графике
Плавный рост · память процесса игры
Где смотреть
Несколько часов записывать в Системном мониторе счётчик Process(игра)\Private Bytes. На мобильных смотреть причину завершения в ApplicationExitInfo на Android (REASON_LOW_MEMORY) и отчёты jetsam на iOS
Подтверждает
С каждым переходом между локациями память растёт и не возвращается, и чем дольше работает игра, тем больше микрофризов и принудительных закрытий
Опровергает
Если память стабильна, а с долгой работой появляется только дрожание, это «Потеря точности времени во float»
Чем проверить
Проверка на стороне игрока
Подробнее
Телефоны обычно держатся за счёт сжатия памяти. Если памяти всё равно не хватает, ОС сразу закрывает игру (вылет). Чем меньше ОЗУ у устройства, тем раньше это происходит.

Источники

  1. Memory allocation among processes Android (Google)
    Android держится за счёт сжатия памяти в zRAM, а когда памяти не хватает, low memory killer завершает процессы. Если завершено приложение на переднем плане, это выглядит как краш
  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: процесс приложения завершён системным low memory killer (устройства без поддержки сообщают REASON_SIGNALED и SIGKILL)

Смотрите также

Тот же слой: L1 Процесс игрового клиента

Причины с тем же симптомом (Микрофризы) на других слоях

Карточка в основной версии с иллюстрациями и экспериментами