Performans sorunlarını tanımlamak genellikle üç kategoriden birine derinlemesine inmek anlamına gelir: kare hızı (hesaplama), bellek veya yükleme süresi.
Roblox, performans sorunlarını tanımlamak için bir dizi araç sunar; bunların bazıları Roblox istemcisinde (ve dolayısıyla Studio'da) mevcutken, bazıları yalnızca Studio'da mevcuttur. İstemci davranışını doğrudan gözlemleyebilirken, sunucu sorunlarını teşhis etmek için araçlar kullanmalısınız.
Tanılama araçları
| Araç | Açıklama | Konum | Klavye kısayolu | Ortam |
|---|---|---|---|---|
| Geliştirici Konsolu | Gerçek zamanlı günlük mesajları, hatalar ve bellek, ağ ve script performansı hakkında ayrıntılı bilgiler içeren bir konsol. Bellek tüketimini, ana sunucu sağlık istatistiklerini, script performans istatistiklerini görüntülemek ve istemci veya sunucu MicroProfiler'ı başlatmak için yararlıdır. | Studio Oyun İçi | F9 | Studio Testi Canlı Oturumlar |
| MicroProfiler | Her karede görevler için harcanan hesaplama süresini ayrıntılı olarak gösteren bir hata ayıklama aracı. Bireysel karelerin kesin bir dökümünü gösteren dökümler oluşturabilir, bu da performans sorunlarına neden olan belirli görevi tanımlamak için yararlıdır. Profili, hangi tarafta sorun varsa istemci veya sunucu üzerinde çalıştırabilirsiniz. | Studio Oyun İçi | CtrlAltF6 (⌘⌥F6) | Studio Testi Canlı Oturumlar |
| Sahne Analizi | İstemci ve sunucu sahnelerinizin kullandığı kaynaklar hakkında anlık karşılaştırmalı bilgiler sağlar ve bu kaynak kullanımından sorumlu olan örnekleri gösterir. | Studio | Yok | Studio Testi |
| Performans İstatistikleri | Bellek tüketimi, CPU, GPU, gönderilen ve alınan ağ verileri ve ping süresi gibi temel performans istatistiklerini içeren bir araç çubuğu. | Oyun İçi | CtrlAltF7 (⌘⌥F7) | Studio Testi Canlı Oturumlar |
| Hata Ayıklama İstatistikleri | Grafikler, fizik, ağ trafiği ve FPS hakkında ayrıntılı bilgilerle örtüşür. | Studio Oyun İçi | ShiftCtrlF1 (Shift⌘F1), ShiftCtrlF2 (Shift⌘F2), ShiftCtrlF3 (Shift⌘F3), ShiftCtrlF4 (Shift⌘F4), ShiftCtrlF5 (Shift⌘F5) | Studio Testi Canlı Oturumlar |
| Ağ Simülasyonu | Gerçek dünya ağ koşullarını simüle eden özellikler, gecikme, jitter ve paket kaybı gibi, bağlantıları test etmek için. | Studio | AltS(⌥S) | Studio Testi |
| Performans Gösterge Tablosu | İstemci ve sunucu bellek kullanımı, istemci kare hızı, sunucu kalp atışı ve çökme oranları için toplu grafikler içeren bir gösterge tablosu. Zamanla performans kalıplarını analiz etmek için yararlıdır. performansı izleme için bakın. | Yaratıcı Gösterge Tablosu | Yok | Canlı Oturumlar |
Sunucu hesaplama
Sunucu kalp atışı tüm oyunlar için 60 FPS ile sınırlıdır, bu nedenle daha düşük değerler bir performans sorunu gösterebilir. Sunucu kalp atışını kontrol etmek için:
Geliştirici Konsolu ile - Sunucu Görevleri sekmesinde, Kalp Atışı satırını genişletin ve oyununuzun kalp atışını temsil eden Adım/Saniye değerini kontrol edin.
MicroProfiler ile, çerçevenin 16.67 ms'den daha uzun sürdüğünü görmek için grafiği kontrol edebilirsiniz.
Düşük sunucu kalp atışının bir başka belirtisi de artan gecikmedir (genellikle ping olarak bilinir). Sunucu, her çerçeve için görevlerini tamamlamakta ne kadar uzun sürerse, istemcilerden gönderilen ve alınan ağ verilerini işlemek o kadar uzun sürer. Bir sunucuya bağlı tüm oyuncular için ortalama ping'i kontrol etmek için Geliştirici Konsolu'ndaki Sunucu İstatistikleri sekmesine gidin.
Eğer sunucu kalp atışı, performansı iyileştirdikten sonra düşük kalıyorsa, oyununuz varsayılan olarak sunucularının aldığı CPU'dan daha fazlasına ihtiyaç duyuyor olabilir. Daha fazlasını Hesaplama için Genişletilmiş Hizmetler ile rezerve edebilirsiniz.
İstemci hesaplama
Varsayılan istemci kare hızı sınırı 60 FPS'dir. Ancak, kullanıcılar Windows'ta kare hızı sınırlarını 240 FPS'ye kadar yükseltebilirler.
Kare hızı cihazlar arasında büyük farklılıklar gösterir. Örneğin, yüksek kaliteli bir PC, hesaplama sorununu "zorlayarak" çözebilir ve yalnızca algılanamayacak kadar küçük bir kare hızı düşüşü yaşayabilir. Eğer daha düşük kaliteli cihazlarda test ederseniz, sorunlar genellikle daha şiddetli olur ve bu nedenle daha kolay fark edilir.
Oyununuza ait kare hızını kontrol etmek için:
İstemcide, hata ayıklama istatistikleri özetini göstermek için ShiftF5 tuşlarına basın.
Studio'nun Pencere ⟩ Performans menüsünden, hata ayıklama istatistiklerini etkinleştirmek için İstatistikler seçeneğini açın.
MicroProfiler ile, çerçevenin 16.67 ms'den daha uzun sürdüğünü görmek için grafiği kontrol edebilirsiniz.
Sunucu bellek
Sunucu bellek kullanımını %50'nin altında tutmaya çalışın. Toplam sunucu belleği aşağıdaki formülü kullanır:
6.25 GiB + (100 MiB * en_büyük_bağlı_oyuncu_sayısı)
Örneğin, 30 bağlı oyuncuya sahip bir sunucunun toplam bellek miktarı yaklaşık 9.18 GiB'dir. Sunucular, oyuncular bağlandıkça bellek kazanır, ancak oyuncular bağlantıyı kestiğinde kaybetmezler. Eğer 10 oyuncu ayrılırsa, sunucu hala 9.18 GiB bellek tutar, 8.2 GiB'ye düşmez.
Sunucular kapandığında (örneğin, boş olduklarında veya güncelleme süreci sırasında), yerlerine geçenler, bellek miktarının temel miktarıyla başlar ve oyuncular bağlandıkça artmaya başlar.
İstemci bellek
Bir oyunun bellek kullanımını kontrol etmenin birkaç yolu vardır:
- Geliştirici Konsolu'nu açın ve Bellek sekmesine geçin. Bu sekme, belleğin nasıl tahsis edildiğine dair bir döküm verir. En doğru okumalar için Studio yerine istemciyi kullanın.
- İstemcideki ayarlar menüsünden Performans İstatistikleri görünümünü etkinleştirerek toplam istemci bellek kullanımını gösteren bir örtü elde edin.
Yüksek bellek kullanımı mutlaka bir sorunu göstermez, ancak daha fazla araştırma yapmanız gerektiğine dair bazı belirtiler şunlardır:
- Performans Gösterge Tablosu'nda görünen önemli bir yüzdede istemci çökmesi, özellikle bir güncelleme ile çakışan ani bir artış. Bazı çökme sayıları beklenir, ancak çökme oranlarınız %2-3'ün üzerine çıkarsa araştırmalısınız.
- Desteklemek istediğiniz bir cihazda test ederken bir çökme meydana gelir.
Bir oyunun istemcideki bellek tüketiminin önemli bir kısmı, belleğe yüklenen varlıklardan, örneğin resimler, mesh'ler ve ses dosyalarından kaynaklanır. Geliştirici Konsolu'nda, PlaceMemory altında aşağıdaki etiketleri kontrol edin:
- GraphicsMeshParts - Mesh'ler tarafından tüketilen grafik belleği.
- GraphicsTexture - Dokular tarafından tüketilen grafik belleği.
- Sounds - Ses dosyaları tarafından tüketilen bellek.
Yükleme süreleri
Yükleme süresi, katılma süresi olarak da adlandırılır, bir oyuncunun Oyna butonuna tıkladığı andan, dünyanın render edildiği ve oynamaya başlayabildiği ana kadar geçen toplam süredir. İstemci bir sunucuya bağlandıktan sonra, katılma şu sırayla gerçekleşir:
- ReplicatedFirst, istemciye çoğaltılır ve içindeki herhangi bir özel yükleme ekranı görünür.
- Veri modelinin geri kalanı çoğaltılır, ReplicatedStorage ve Workspace içindeki her şey dahil. Eğer örnek akışı etkinleştirirseniz, bu aşamada yalnızca oyuncunun doğma noktasına yakın Workspace alanı çoğaltılır.
- Oyuncunun avatarı yüklenir. Yükleme süresi, yükleme ekranı kaybolduğunda ve dünya render edilmeye başladığında sona erer.
Hangi adımın yavaş olduğunu bilmek, en büyük etkiye sahip optimizasyonları seçmenize yardımcı olur. Yaygın nedenler ve çözümler için Performansı İyileştir sayfasına bakın.
Yükleme sürelerini kontrol etmek için yerleşik araçlar yoktur, ancak milisaniye düzeyinde hassasiyet gerektirmediğinden, genellikle mevcut temelinizin anlaşılması ve önemli bir iyileştirme yapıp yapmadığınızı kontrol etmek için bir kronometre yeterlidir. ReplicatedFirst içinde bir istemci scripti kullanarak değişikliklerinizin yükleme sürelerini nasıl etkilediğine dair bir fikir edinebilirsiniz, ancak bu script tam, uçtan uca bir ölçüm sağlamaz. ReplicatedFirst çoğaltıldıktan sonra zamanlamaya başlar ve ilk çoğaltma tamamlandığında ve DataModel.Loaded tetiklendiğinde durur, bu nedenle bir sunucuya bağlanma veya avatar yükleme süresini içermez:
local startTime = os.clock()
game.Loaded:Connect(function()
local loadTime = os.clock() - startTime
local roundedLoadTime = math.round(loadTime * 10000) / 10000 -- dört ondalık basamak
print("Oyun " .. roundedLoadTime .. " saniyede yüklendi.")
print("Yüklenen örnek sayısı: " .. #workspace:GetDescendants())
end)Ekstra bilgi için, oyunu Studio'da başlattığınızda boyut ve örnek türüne göre en büyük 20 örneği yazdırmak için Studio Ayarları içindeki Yükleme Boyutunu Yazdır seçeneğini etkinleştirin.
Eğer yükleme süreniz, oyununuzun görünür boyutuna göre beklenmedik şekilde yüksekse, yerinizi tanınmamış veya obfuscate edilmiş scriptler için inceleyin. Yaratıcı Mağaza'dan alınan bazı ücretsiz modeller, bir oyuncu katıldığında çoğaltılması gereken veri miktarını dramatik şekilde artıran binlerce ekstra örnek oluşturan scriptler içerir.
Her optimizasyon veya güncellemeden önce ve sonra yükleme süresini ölçerek etkisini doğrulayabilir ve gerilemeleri yakalayabilirsiniz. Ani bir artış, genellikle ReplicatedStorage'a yakın zamanda içerik eklendiğini veya bir varlık değişikliğinin indirme boyutunu artırdığını gösterir.
Ping
Ping (gecikme) için iki ana ölçüm ağ ping ve veri ping'dir.
Ağ ping, istemcinin bir ağ veri paketi gönderdiği andan sunucunun yankı yanıtını aldığı ana kadar geçen gidiş-dönüş süresidir. Genel amaçlı ping ağ yardımcı programı tarafından bildirilen time ile benzerlik gösterir.
Ağ ping, Performans İstatistikleri çubuğunda görünür. Çoğunlukla istemci ile sunucu arasındaki ağ yolunun uzunluğundan etkilenir ve kontrolünüz dışındadır. Ancak, Studio'da oyun testi yaparken ağ simülasyonu kullanarak ping ve diğer ağ koşullarını simüle edebilirsiniz.
Veri ping, istemcinin verileri güvenilir bir şekilde çoğaltma sisteminden gönderdiği andan sunucunun çoğaltma sisteminden yankı yanıtını aldığı ana kadar geçen gidiş-dönüş süresidir. Hem istemcinin hem de sunucunun çoğaltma kuyruklarında harcanan zamanı, kaybolan veya bozulmuş paketlerin TCP benzeri yeniden iletimlerini içerir.
Veri ping, istemciden güvenilir bir uzak olay göndermeye, sunucuda alıp, ardından sunucudan istemciye yanıt olarak güvenilir bir uzak olay göndermeye benzer. Veri ping, istemci ile sunucu arasındaki ağda harcanan zamanı da içerdiğinden, ağ pinginden büyük veya eşit olmalıdır.
Bir sunucuya bağlı tüm oyuncular için ortalama veri ping, Geliştirici Konsolu'nun Sunucu İstatistikleri sekmesinde görünür. Bireysel bir istemci için veri ping, ağ hata ayıklama istatistiklerini görüntülemek için ShiftF3 tuşlarına basarak görünür.
Veri ping, hem ağ yolu hem de çoğaltma kuyruk gecikmelerinden etkilenir. Sunucu, çoğaltma verilerini ağın gönderebileceğinden (veya istemcinin işleyebileceğinden) daha hızlı oluşturduğunda, veriler çoğaltma kuyruklarında beklemek zorunda kalır. Veri ping ile ağ ping arasında bazı farklılıklar, hem ağ yeniden iletmeleri hem de Roblox uygulaması tarafından ağ verilerinin işlenme şekli nedeniyle normaldir. Ancak, veri ping ağ pinginden önemli ölçüde daha yüksekse, ağ trafiğini görüntülemek için MicroProfiler kullanın. Optimizasyon önerileri için ağ ve çoğaltma sayfasına bakın.