Mengidentifikasi masalah kinerja umumnya berarti menyelidiki salah satu dari tiga kategori: frame rate (komputasi), memori, atau waktu muat.
Roblox memiliki sejumlah alat untuk mengidentifikasi masalah kinerja, beberapa di antaranya tersedia di klien Roblox (dan oleh karena itu Studio) dan beberapa hanya tersedia di Studio. Sementara Anda dapat mengamati perilaku klien secara langsung, Anda harus menggunakan alat untuk mendiagnosis masalah server.
Alat diagnostik
| Alat | Deskripsi | Lokasi | Jalur keyboard | Lingkungan |
|---|---|---|---|---|
| Konsol Pengembang | Sebuah konsol dengan pesan log waktu nyata, kesalahan, dan informasi rinci tentang memori, jaringan, dan kinerja skrip. Ini berguna untuk melihat konsumsi memori, statistik kesehatan server utama, statistik kinerja skrip, dan untuk meluncurkan MicroProfiler klien atau server. | Studio Dalam Permainan | F9 | Pengujian Studio Sesi Langsung |
| MicroProfiler | Sebuah alat debugging yang memecah berapa banyak waktu komputasi yang dihabiskan untuk tugas setiap frame. Ini dapat menghasilkan dump untuk analisis yang menunjukkan pemecahan rinci dari frame individu, sehingga membantu untuk mengidentifikasi tugas spesifik yang menyebabkan masalah kinerja. Anda dapat menjalankan profiler di klien atau server, tergantung pada sisi mana yang memiliki masalah. | Studio Dalam Permainan | CtrlAltF6 (⌘⌥F6) | Pengujian Studio Sesi Langsung |
| Analisis Adegan | Menyediakan informasi komparatif sekilas tentang sumber daya yang digunakan oleh adegan klien dan server Anda dan instance mana yang bertanggung jawab atas penggunaan sumber daya tersebut. | Studio | Tidak ada | Pengujian Studio |
| Statistik Kinerja | Sebuah toolbar dengan statistik kinerja dasar, termasuk konsumsi memori, CPU, GPU, data jaringan yang dikirim dan diterima, dan waktu ping. | Dalam Permainan | CtrlAltF7 (⌘⌥F7) | Pengujian Studio Sesi Langsung |
| Statistik Debug | Overlay dengan informasi rinci tentang grafik, fisika, lalu lintas jaringan, dan FPS. | Studio Dalam Permainan | ShiftCtrlF1 (Shift⌘F1), ShiftCtrlF2 (Shift⌘F2), ShiftCtrlF3 (Shift⌘F3), ShiftCtrlF4 (Shift⌘F4), ShiftCtrlF5 (Shift⌘F5) | Pengujian Studio Sesi Langsung |
| Simulasi Jaringan | Properti yang mensimulasikan kondisi jaringan dunia nyata seperti latensi, jitter, dan kehilangan paket untuk menguji koneksi. | Studio | AltS(⌥S) | Pengujian Studio |
| Dasbor Kinerja | Sebuah dasbor dengan grafik agregat untuk penggunaan memori klien dan server, frame rate klien, detak jantung server, dan tingkat kerusakan secara waktu nyata. Ini berguna untuk menganalisis pola kinerja dari waktu ke waktu. Lihat memantau kinerja. | Dasbor Pembuat | Tidak ada | Sesi Langsung |
Komputasi Server
Detak jantung server dibatasi pada 60 FPS untuk semua permainan, jadi nilai yang lebih rendah mungkin menunjukkan masalah kinerja. Untuk memeriksa detak jantung server:
Dengan Konsol Pengembang - Di tab Pekerjaan Server, perluas baris Detak Jantung dan periksa nilai Langkah Per Detik, yang mewakili detak jantung permainan Anda.
Dengan MicroProfiler, Anda dapat memeriksa grafik untuk melihat apakah frame memakan waktu lebih dari 16,67 ms.
Gejala lain dari detak jantung server yang menurun adalah peningkatan latensi (umumnya dikenal sebagai ping). Semakin lama server memerlukan waktu untuk menyelesaikan komputasi tugasnya setiap frame, semakin lama waktu yang dibutuhkan untuk memproses data jaringan yang dikirim dan diterima dari klien. Untuk memeriksa rata-rata ping untuk semua pemain yang terhubung ke server, buka tab Statistik Server di Konsol Pengembang.
Jika detak jantung server tetap rendah setelah Anda meningkatkan kinerja, permainan Anda mungkin memerlukan lebih banyak CPU daripada yang didapat server secara default. Anda dapat memesan lebih banyak dengan Layanan Diperpanjang untuk Komputasi.
Komputasi Klien
Batas frame rate klien default adalah 60 FPS. Namun, pengguna dapat meningkatkan batas frame rate mereka hingga 240 FPS di Windows.
Frame rate berbeda secara signifikan antara perangkat. Misalnya, PC kelas atas mungkin dapat "memaksa" masalah komputasi dan hanya mengalami penurunan frame rate yang tidak terdeteksi. Jika Anda mengujicoba di perangkat kelas bawah, masalah cenderung lebih parah dan lebih mudah untuk diperhatikan.
Untuk memeriksa frame rate permainan Anda:
Di klien, tekan ShiftF5 untuk menampilkan ringkasan statistik debug.
Dari menu Jendela ⟩ Kinerja di Studio, aktifkan Statistik untuk mengaktifkan statistik debug.
Dengan MicroProfiler, Anda dapat memeriksa grafik untuk melihat apakah frame memakan waktu lebih dari 16,67 ms.
Memori Server
Cobalah untuk menjaga penggunaan memori server di bawah 50%. Total penggunaan memori server menggunakan rumus berikut:
6.25 GiB + (100 MiB * jumlah_pemain_terhubung_terbesar)
Sebagai contoh, server dengan 30 pemain terhubung memiliki sekitar 9,18 GiB total memori. Server mendapatkan memori saat pemain terhubung, tetapi tidak kehilangan memori saat pemain terputus. Jika 10 pemain keluar, server masih memiliki 9,18 GiB memori daripada menyusut menjadi 8,2 GiB.
Ketika server dimatikan (misalnya, ketika mereka kosong atau sebagai bagian dari proses pembaruan), penggantinya mulai dengan jumlah memori dasar dan mulai meningkat saat pemain terhubung.
Memori Klien
Ada beberapa cara untuk memeriksa penggunaan memori untuk sebuah permainan:
- Buka Konsol Pengembang dan beralih ke tab Memori. Tab ini memberikan rincian tentang bagaimana memori dialokasikan. Gunakan klien daripada Studio untuk mendapatkan pembacaan yang paling akurat.
- Aktifkan tampilan Statistik Kinerja dari menu pengaturan di klien untuk melihat overlay dengan total penggunaan memori klien.
Penggunaan memori yang tinggi tidak selalu menunjukkan masalah, tetapi beberapa indikasi bahwa Anda mungkin perlu menyelidiki lebih lanjut adalah:
- Persentase signifikan dari kerusakan klien yang ditampilkan di Dasbor Kinerja, terutama lonjakan mendadak yang bertepatan dengan pembaruan. Beberapa jumlah kerusakan diharapkan, tetapi Anda harus menyelidiki jika tingkat kerusakan Anda meningkat di atas 2-3%.
- Sebuah kerusakan terjadi saat menguji di perangkat yang ingin Anda dukung dalam permainan Anda.
Sebagian besar konsumsi memori permainan di klien berasal dari aset, seperti gambar, mesh, dan file audio, yang dimuat ke dalam memori. Di Konsol Pengembang, periksa label berikut di bawah PlaceMemory:
- GraphicsMeshParts - Memori grafis yang dikonsumsi oleh mesh.
- GraphicsTexture - Memori grafis yang dikonsumsi oleh tekstur.
- Sounds - Memori yang dikonsumsi oleh file audio.
Waktu Muat
Waktu muat, juga disebut waktu bergabung, adalah total waktu dari saat pemain mengklik Mainkan hingga saat dunia dirender dan mereka dapat mulai bermain. Setelah klien terhubung ke server, bergabung terjadi dalam urutan berikut:
- ReplicatedFirst direplikasi ke klien, dan setiap layar pemuatan kustom di dalamnya muncul.
- Sisa model data direplikasi, termasuk semua yang ada di ReplicatedStorage dan Workspace. Jika Anda mengaktifkan streaming instance, hanya area Workspace dekat titik spawn pemain yang direplikasi pada tahap ini.
- Avatar pemain dimuat. Waktu muat berakhir ketika layar pemuatan menghilang dan dunia mulai dirender.
Mengetahui langkah mana yang lambat membantu Anda memilih optimasi dengan dampak terbesar. Untuk penyebab umum dan perbaikan, lihat Tingkatkan kinerja.
Tidak ada alat bawaan untuk memeriksa waktu muat, tetapi karena mereka tidak memerlukan presisi tingkat milidetik, stopwatch biasanya adalah semua yang Anda butuhkan untuk memahami baseline saat ini dan memeriksa apakah Anda telah membuat perbaikan substansial. Anda dapat menggunakan skrip klien di ReplicatedFirst untuk mendapatkan gambaran tentang bagaimana perubahan Anda mempengaruhi waktu muat, tetapi skrip ini tidak memberikan pengukuran lengkap dari awal hingga akhir. Ini mulai menghitung waktu setelah ReplicatedFirst direplikasi dan berhenti ketika replikasi awal selesai dan DataModel.Loaded dipicu, jadi tidak termasuk waktu untuk terhubung ke server atau memuat avatar:
local startTime = os.clock()
game.Loaded:Connect(function()
local loadTime = os.clock() - startTime
local roundedLoadTime = math.round(loadTime * 10000) / 10000 -- empat tempat desimal
print("Permainan dimuat dalam " .. roundedLoadTime .. " detik.")
print("Jumlah instance yang dimuat: " .. #workspace:GetDescendants())
end)Untuk wawasan tambahan, aktifkan Cetak Rincian Ukuran Bergabung dari tab Jaringan di Pengaturan Studio untuk mencetak 20 instance teratas berdasarkan ukuran dan rincian persentase berdasarkan jenis instance saat Anda memulai permainan di Studio.
Jika waktu muat Anda secara tidak terduga tinggi relatif terhadap ukuran permainan Anda yang tampak, periksa tempat Anda untuk skrip yang tidak dikenali atau terobfuscate. Beberapa model gratis dari Toko Pembuat mengandung skrip yang menghasilkan ribuan instance tambahan, yang secara dramatis meningkatkan jumlah data yang harus direplikasi saat seorang pemain bergabung.
Ukur waktu muat sebelum dan setelah setiap optimasi atau pembaruan sehingga Anda dapat mengonfirmasi dampaknya dan menangkap regresi. Peningkatan mendadak sering berarti bahwa konten baru-baru ini ditambahkan ke ReplicatedStorage atau bahwa perubahan aset meningkatkan ukuran unduhan.
Ping
Dua pengukuran utama dari ping (latensi) adalah ping jaringan dan ping data.
Ping jaringan adalah waktu perjalanan pulang-pergi yang diukur dari saat klien mengirim paket data jaringan hingga saat menerima balasan echo dari server. Ini mirip dengan apa yang akan dilaporkan sebagai time oleh utilitas jaringan ping umum.
Ping jaringan terlihat di bilah Statistik Kinerja. Ini sebagian besar dipengaruhi oleh panjang jalur jaringan antara klien dan server, dan berada di luar kendali Anda. Namun, Anda dapat mensimulasikan ping dan kondisi jaringan lainnya menggunakan simulasi jaringan saat menguji di Studio.
Ping data adalah waktu perjalanan pulang-pergi yang diukur dari saat klien mengirim data secara andal melalui sistem replikasi hingga saat menerima balasan echo dari sistem replikasi server. Ini termasuk waktu yang dihabiskan di antrean replikasi klien dan server, bersama dengan retransmisi seperti TCP dari paket yang hilang atau rusak.
Ping data mirip dengan mengirim acara jarak jauh yang andal dari klien, menerimanya di server, dan kemudian mengirim acara jarak jauh yang andal dari server ke klien sebagai respons. Karena ping data juga mencakup waktu yang dihabiskan di jaringan antara klien dan server, ini lebih besar dari atau sama dengan ping jaringan.
Rata-rata ping data untuk semua pemain yang terhubung ke server terlihat di tab Statistik Server di Konsol Pengembang. Ping data untuk klien individu terlihat menggunakan ShiftF3 untuk menampilkan statistik debug jaringan.
Ping data dipengaruhi oleh jalur jaringan dan oleh penundaan antrean replikasi. Ketika server menghasilkan data replikasi lebih cepat daripada jaringan dapat mengirimnya (atau lebih cepat daripada klien dapat memprosesnya), data harus menunggu di antrean replikasi. Beberapa perbedaan antara ping data dan ping jaringan adalah hal yang normal karena baik retransmisi jaringan maupun cara data jaringan diproses oleh aplikasi Roblox. Namun, jika ping data jauh lebih tinggi daripada ping jaringan, gunakan MicroProfiler untuk melihat lalu lintas jaringan. Untuk saran optimasi, lihat jaringan dan replikasi.