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

Sách trắng lag game › L1 Tiến trình game phía client

Rò rỉ bộ nhớ phía client Client memory leak

ID nguyên nhân cg-leak · Phụ trách chính Phát triển client (Đội phát triển game)

Mở thẻ gốc có hình minh họa và thí nghiệm →

Game bật càng lâu thì bộ nhớ dùng càng tăng, game chậm dần rồi cuối cùng bị tắt cưỡng bức.

Vì sao Texture, UI, hiệu ứng không được giải phóng khi chuyển qua lại giữa các bản đồ → Dẫn đến GC chạy dày hơn, OS thiếu bộ nhớ nên phải dùng swap → Trên màn hình Sau vài giờ chơi, game giật khựng ngày càng nhiều rồi bị tắt cưỡng bức (người chơi thấy giống mất kết nối)

Triệu chứng
Giật khựng, Mất kết nối
Yếu tố
Ngưng trệ
Ai gặp phải
Chỉ mình tôi
Khi nào
Càng chạy lâu càng nặng
Phụ trách
Phụ trách chính Phát triển client (Đội phát triển game)
Việc cần làm (Đội phát triển game)
Đo mức dùng bộ nhớ mỗi lần chuyển bản đồ, tìm và sửa texture, UI, hiệu ứng không được giải phóng, chạy test tự động dài giờ (soak test).
Trên đồ thị
Tăng dần · Bộ nhớ của tiến trình game
Chỗ cần xem
Ghi Process(game)\Private Bytes bằng Performance Monitor trong vài giờ. Trên di động: lý do thoát (REASON_LOW_MEMORY) trong ApplicationExitInfo của Android và báo cáo jetsam của iOS
Đúng nếu
mỗi lần chuyển qua lại giữa các bản đồ, bộ nhớ tăng lên mà không giảm xuống; bật càng lâu thì giật khựng và bị tắt càng nhiều
Loại trừ nếu
bộ nhớ ổn định, chỉ bị rung khi bật lâu → “Mất độ chính xác thời gian kiểu float”
Cách kiểm tra
Kiểm tra ở môi trường phía người chơi
Tìm hiểu thêm
Điện thoại chủ yếu cầm cự bằng cách nén bộ nhớ. Nếu vẫn thiếu, OS tắt game ngay lập tức (văng game). Máy càng ít RAM thì càng bị tắt sớm.

Nguồn

  1. Memory allocation among processes Android (Google)
    Android nén bộ nhớ vào zRAM để cầm cự, thiếu nữa thì low memory killer kết thúc tiến trình; ứng dụng đang hiện ở foreground bị tắt thì trông như crash
  2. Identifying high-memory use with jetsam event reports Apple
    iOS buộc tắt ứng dụng (jetsam) khi áp lực bộ nhớ không giảm; ứng dụng nào vượt giới hạn bộ nhớ dành cho nó thì bị đưa vào diện bị tắt
  3. Find user-mode memory leaks with Performance Monitor (PerfMon) Microsoft
    Ghi lâu Process > Private Bytes (bộ nhớ riêng tiến trình đã cấp phát) và Virtual Bytes; nếu chỉ tăng mãi thì là rò rỉ
  4. ApplicationExitInfo Android (Google)
    REASON_LOW_MEMORY: low memory killer của hệ thống đã kết thúc tiến trình ứng dụng (máy không hỗ trợ thì báo là REASON_SIGNALED, SIGKILL)

Nguyên nhân nên xem cùng

Cùng tầng: L1 Tiến trình game phía client

Nguyên nhân ở tầng khác gây cùng triệu chứng (Giật khựng)

Xem thẻ gốc có hình minh họa và thí nghiệm