Identyfikacja problemów wydajnościowych zazwyczaj oznacza skupienie się na jednej z trzech kategorii: liczba klatek na sekundę (obliczenia), pamięć lub czas ładowania.
Roblox posiada szereg narzędzi do identyfikacji problemów wydajnościowych, z których część jest dostępna w kliencie Robloxa (a więc także w Studio), a część dostępna jest tylko w Studio. Podczas gdy możesz bezpośrednio obserwować zachowanie klienta, musisz korzystać z narzędzi do diagnozowania problemów po stronie serwera.
Narzędzia diagnostyczne
| Narzędzie | Opis | Lokalizacja | Skrót klawiszowy | Środowisko |
|---|---|---|---|---|
| Konsola dewelopera | Konsola z komunikatami logów w czasie rzeczywistym, błędami i szczegółowymi informacjami na temat pamięci, sieci i wydajności skryptów. Jest przydatna do przeglądania zużycia pamięci, kluczowych statystyk zdrowia serwera, statystyk wydajności skryptów oraz do uruchamiania klienta lub serwera MicroProfilera. | Studio W Grze | F9 | Testowanie w Studio Sesje na żywo |
| MicroProfiler | Narzędzie debugowania, które pokazuje, ile czasu obliczeniowego poświęca się na zadania w każdej klatce. Może generować zrzuty do analizy pokazujące precyzyjny podział poszczególnych klatek, co jest pomocne w identyfikacji konkretnego zadania powodującego problemy z wydajnością. Możesz uruchomić profiler na kliencie lub serwerze, w zależności od tego, która strona ma problem. | Studio W Grze | CtrlAltF6 (⌘⌥F6) | Testowanie w Studio Sesje na żywo |
| Analiza sceny | Zapewnia informacje porównawcze na pierwszy rzut oka o zasobach wykorzystywanych przez sceny klienta i serwera oraz które instancje są odpowiedzialne za to zużycie zasobów. | Studio | N/A | Testowanie w Studio |
| Statystyki wydajności | Pasek narzędzi z podstawowymi statystykami wydajności, w tym zużyciem pamięci, CPU, GPU, danymi sieciowymi wysłanymi i odebranymi oraz czasem ping. | W Grze | CtrlAltF7 (⌘⌥F7) | Testowanie w Studio Sesje na żywo |
| Statystyki debugowania | Nałożenie szczegółowych informacji na temat grafiki, fizyki, ruchu w sieci i FPS. | Studio W Grze | ShiftCtrlF1 (Shift⌘F1), ShiftCtrlF2 (Shift⌘F2), ShiftCtrlF3 (Shift⌘F3), ShiftCtrlF4 (Shift⌘F4), ShiftCtrlF5 (Shift⌘F5) | Testowanie w Studio Sesje na żywo |
| Symulacja sieci | Właściwości, które symulują rzeczywiste warunki sieciowe, takie jak opóźnienie, jitter i utrata pakietów, w celu przetestowania połączeń. | Studio | AltS(⌥S) | Testowanie w Studio |
| Panel wydajności | Panel z łącznymi wykresami zużycia pamięci klienta i serwera, liczby klatek na sekundę klienta, pulsu serwera oraz wskaźników awarii w czasie rzeczywistym. Jest pomocny w analizie wzorców wydajności w czasie. Zobacz monitorowanie wydajności. | Panel twórcy | N/A | Sesje na żywo |
Obliczenia serwera
Puls serwera jest ograniczony do 60 FPS dla wszystkich gier, więc niższe wartości mogą wskazywać na problem z wydajnością. Aby sprawdzić puls serwera:
Z użyciem Konsoli dewelopera - W zakładce Zadania serwera, rozwiń wiersz Puls i sprawdź wartość Kroki na sek., która reprezentuje puls twojej gry.
Z użyciem MicroProfilera, możesz sprawdzić wykres, aby zobaczyć, czy klatka zajmuje więcej niż 16.67 ms.
Innym objawem obniżonego pulsu serwera jest zwiększone opóźnienie (znane jako ping). Im dłużej serwer zajmuje czas na zakończenie obliczeń swoich zadań w każdej klatce, tym dłużej zajmuje mu przetwarzanie danych sieciowych wysłanych i odebranych od klientów. Aby sprawdzić średni ping dla wszystkich graczy połączonych z serwerem, przejdź do zakładki Statystyki serwera w Konsoli dewelopera.
Obliczenia klienta
Domyślny limit liczby klatek na sekundę dla klienta wynosi 60 FPS. Użytkownicy mogą jednak podnieść limit liczby klatek na sekundę do 240 FPS na systemie Windows.
Liczba klatek na sekundę różni się znacznie w zależności od urządzeń. Na przykład, komputer z wyższej półki może być w stanie "przeciążyć" problem obliczeniowy i jedynie doświadczyć niedostrzegalnego spadku liczby klatek na sekundę. Jeśli testujesz na urządzeniach o niższej wydajności, problemy zazwyczaj są poważniejsze i łatwiejsze do zauważenia.
Aby sprawdzić liczbę klatek na sekundę w twojej grze:
W kliencie, naciśnij ShiftF5, aby wyświetlić podsumowanie statystyk debugowania.
Z menu Okno ⟩ Wydajność w Studio przełącz na Statystyki, aby włączyć statystyki debugowania.
Z użyciem MicroProfilera, możesz sprawdzić wykres, aby zobaczyć, czy klatka zajmuje więcej niż 16.67 ms.
Pamięć serwera
Staraj się utrzymać zużycie pamięci serwera poniżej 50%. Całkowita pamięć serwera korzysta z poniższego wzoru:
6.25 GiB + (100 MiB * największa_liczba_połączonych_graczy)
Na przykład serwer z 30 połączonymi graczami ma około 9.18 GiB całkowitej pamięci. Serwery zyskują pamięć, gdy gracze się łączą, ale nie tracą jej, gdy gracze się rozłączają. Jeśli 10 graczy odejdzie, serwer nadal ma 9.18 GiB pamięci zamiast skurczyć się do 8.2 GiB.
Gdy serwery są zamykane (na przykład, gdy są puste lub w ramach procesu aktualizacji), ich zamienniki zaczynają od podstawowej ilości pamięci i zaczynają się zwiększać w miarę łączenia się graczy.
Pamięć klienta
Istnieje kilka sposobów, aby sprawdzić zużycie pamięci w grze:
- Otwórz Konsolę dewelopera i przełącz się na zakładkę Pamięć. Ta zakładka daje podział na to, jak pamięć jest przydzielana. Używaj klienta zamiast Studio, aby uzyskać najdokładniejsze dane.
- Włącz widok Statystyk wydajności z menu ustawień w kliencie, aby zobaczyć nałożenie z całkowym zużyciem pamięci klienta.
Wysokie zużycie pamięci niekoniecznie oznacza problem, ale niektóre wskazówki sugerujące, że warto to zbadać, to:
- Znaczący procent awarii klienta pokazujących się w Panelu wydajności, szczególnie nagły wzrost, który zbiegł się z aktualizacją. Oczekiwany jest pewien poziom awarii, ale powinieneś zbadać, czy wskaźniki awarii wzrosły powyżej 2-3%.
- Awaria występuje podczas testowania na urządzeniu, które chcesz wspierać.
Znacząca część zużycia pamięci gry przez klienta pochodzi z zasobów, takich jak obrazy, meshe i pliki audio, ładowane do pamięci. W Konsoli dewelopera sprawdź następujące etykiety w sekcji PlaceMemory:
- GraphicsMeshParts - Pamięć graficzna zużywana przez meshe.
- GraphicsTexture - Pamięć graficzna zużywana przez tekstury.
- Sounds - Pamięć zużywana przez pliki audio.
Czasy ładowania
Nie ma wbudowanych narzędzi do sprawdzania czasów ładowania, ale ponieważ nie wymagają one precyzji na poziomie milisekund, zazwyczaj wystarczy zegar stopera, aby zrozumieć swój aktualny poziom odniesienia i sprawdzić, czy dokonano znacznej poprawy. Możesz użyć skryptu klienta w ReplicatedFirst, aby uzyskać pewne pojęcie o tym, jak twoje zmiany wpływają na czasy ładowania, ale ten skrypt nie zapewnia pełnego pomiaru end-to-end:
local startTime = os.clock()
game.Loaded:Connect(function()
local loadTime = os.clock() - startTime
local roundedLoadTime = math.round(loadTime * 10000) / 10000 -- cztery miejsca po przecinku
print("Gra załadowana w " .. roundedLoadTime .. " sekundach.")
print("Liczba załadowanych instancji: " .. #workspace:GetDescendants())
end)
Aby uzyskać dodatkowe informacje, włącz Rozbicie rozmiaru dołączenia z zakładki Sieć w Ustawieniach Studio, aby wydrukować 20 największych instancji według rozmiaru i rozbicie procentowe według typu instancji, gdy rozpoczynasz grę w Studio.
Ping
Dwie podstawowe miary pingu (opóźnienia) to ping sieciowy i ping danych.
Ping sieciowy to czas podróży tam i z powrotem mierzony od wysłania pakietu danych sieciowych przez klienta do momentu, gdy otrzyma on echo odpowiedzi serwera. Jest to podobne do tego, co byłoby zgłaszane jako time przez ogólne narzędzie ping.
Ping sieciowy jest widoczny w pasku Statystyk wydajności. Jest głównie dotknięty długością ścieżki sieciowej między klientem a serwerem i jest poza twoją kontrolą. Możesz jednak symulować ping i inne warunki sieciowe używając symulacji sieci podczas testowania w Studio.
Ping danych to czas podróży tam i z powrotem mierzony od momentu, gdy klient wysyła dane niezawodnie przez system replikacji do momentu, gdy otrzymuje echo odpowiedzi z systemu replikacji serwera. Zawiera czas spędzony zarówno w kolejkach replikacji klienta, jak i serwera, a także retransmisje przypominające TCP utraconych lub uszkodzonych pakietów.
Ping danych jest podobny do wysłania niezawodnego zdarzenia zdalnego z klienta, otrzymania go na serwerze, a następnie wysłania niezawodnego zdarzenia zdalnego z serwera do klienta w odpowiedzi. Ponieważ ping danych obejmuje również czas spędzony w sieci między klientem a serwerem, jest większy lub równy pingowi sieciowemu.
Średni ping danych dla wszystkich graczy połączonych z serwerem jest widoczny w zakładce Statystyki serwera w Konsoli dewelopera. Ping danych dla konkretnego klienta jest widoczny przy użyciu ShiftF3, aby wyświetlić statystyki debugowania sieci.
Ping danych jest dotknięty zarówno długością ścieżki sieciowej, jak i opóźnieniami kolejek replikacji. Gdy serwer generuje dane replikacji szybciej, niż sieć jest w stanie je wysłać (lub szybciej, niż klient jest w stanie je przetworzyć), dane muszą czekać w kolejkach replikacyjnych. Pewna różnica między pingiem danych a pingiem sieciowym jest normalna z powodu zarówno retransmisji sieciowych, jak i sposobu przetwarzania danych sieciowych przez aplikację Roblox. Jeśli jednak ping danych jest znacznie wyższy niż ping sieciowy, użyj MicroProfilera, aby zobaczyć ruch sieciowy. W celu uzyskania sugestii dotyczących optymalizacji, zobacz sieci i replikację.