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

Buku Putih Lag Game › L10 Memori

Jeda GC di engine skrip Scripting VM GC (Lua, etc.)

ID penyebab mem-script-gc · Penanggung jawab utama Pengembangan server (Tim Pengembang Game)

Buka kartu interaktif dengan gambar dan simulasi →

Walaupun servernya ditulis dengan C++, jika quest, AI, dan skill dijalankan dengan skrip seperti Lua, zona itu berhenti selama GC engine skrip berjalan.

Mengapa Engine skrip di setiap zona menjalankan quest, AI, dan event sambil membuat objek sementara dalam jumlah besar → Akibatnya Saat GC engine skrip mengumpulkan banyak garbage sekaligus, tick zona itu terhenti → Di layar Tersendat sesaat secara berkala, hanya di zona tertentu atau selama event tertentu

Gejala
Patah-patah, Freeze
Faktor
Stall
Siapa yang mengalami
Lokasi/channel tertentu
Kapan
Saat banyak pemain berkumpul, Secara berkala
Penanggung jawab
Penanggung jawab utama Pengembangan server (Tim Pengembang Game)
Tugas Tim Pengembang Game
Atur GC ke mode incremental atau generational, jalankan GC sedikit demi sedikit di setiap tick, kurangi objek sementara di skrip.
Kisaran angka
Jika heap skrip membesar hingga ratusan MB, pengumpulan sekaligus (saat pengumpulan incremental dimatikan, atau pengumpulan penuh di mode generational) bisa memakan puluhan hingga ratusan ms.
Di grafik
Melonjak secara berkala · Waktu tick per zona, memori engine skrip
Yang diperiksa
Catat waktu tick per zona dan penggunaan memori engine skrip di zona itu (Lua: collectgarbage("count")) di setiap tick, lalu tumpangkan dalam satu grafik
Cocok jika
Memori skrip anjlok (pengumpulan sekaligus) tepat saat tick zona itu melonjak, sementara zona lain normal
Tidak cocok jika
Tick melonjak tanpa perubahan memori skrip: lebih mungkin beban atau lock di zona itu. Semua zona di server melonjak bersamaan: lebih mungkin GC server (mem-gc) atau swap (mem-swap)
Sarana pemeriksaan
Log dan metrik server atau klien game

Sumber

  1. Lua 5.4 Reference Manual Lua.org
    Mode incremental membagi pengumpulan menjadi langkah-langkah kecil yang diselipkan di antara eksekusi program (jika langkahnya dibuat besar, menjadi stop-the-world); pengumpulan major di mode generational adalah stop-the-world yang menelusuri semua objek; collectgarbage("count") mengembalikan total memori yang dipakai Lua (KB)

Lihat juga

Lapisan yang sama: L10 Memori

Penyebab di lapisan lain dengan gejala yang sama (Patah-patah)

Lihat kartu interaktif dengan gambar dan simulasi