Dwadzieścia TPS to cel. Wszystko poniżej jest odczuwalne: bloki, które łamią się z opóźnieniem, moby, które się zacinają, redstone, który nie działa niezawodnie. Poniżej kroki, które mają największy wpływ, w kolejności. Mierz przed i po każdej zmianie za pomocą /spark tps.
Krok 1: najpierw zmierz, nie zgaduj
Otwórz konsolę i wpisz /spark profiler start. Graj przez pięć minut normalnie. Wpisz /spark profiler stop. Spark wygeneruje link do przeglądu, który dokładnie pokazuje, na co idzie czas ticku. Bez tego pomiaru zmieniasz ustawienia po omacku.
Trzy najczęstsi winowajcy: generowanie chunków (gracze eksplorujący nowy teren), entity (moby, przedmioty, armor standy) i źle napisane pluginy.
Krok 2: wstępne generowanie chunków
Generowanie chunków to najcięższa operacja, jaką wykonuje serwer Minecraft. Za każdym razem, gdy gracz wchodzi na nowy teren, serwer musi go obliczyć. Za pomocą pluginu Chunky generujesz mapę z wyprzedzeniem:
/chunky radius 5000/chunky start
To generuje okrąg o promieniu 5000 bloków wokół spawnu. Rób to w spokojnym momencie; zajmuje to czas, ale zapobiega lagom podczas gry. Następnie ustaw granicę świata, aby gracze nie wychodzili poza wygenerowany obszar.
Krok 3: zmniejsz view i simulation distance
Otwórz server.properties:
view-distance=7(domyślnie 10; dla survival 6 do 8 jest odpowiednie)simulation-distance=4(domyślnie 10; określa, do jakiej odległości moby i redstone są aktywne)
Różnica jest duża: view-distance 10 ładuje cztery razy więcej chunków niż view-distance 5. Simulation distance 4 zamiast 10 oznacza, że entity poza czterema chunkami nie kosztują już czasu ticku.
Krok 4: ustaw limity entity
W bukkit.yml pod spawn-limits:
monsters: 50(domyślnie 70)animals: 10(domyślnie 10)water-animals: 3(domyślnie 5)ambient: 1(domyślnie 15; nietoperze kosztują TPS i nic nie robią)
W paper-world-defaults.yml znajdziesz despawn-ranges i entity-per-chunk-save-limit. Zmniejsz limit zapisu dla item frames i armor standów, jeśli Twój serwer ma ich dużo.
Krok 5: flagi JVM Aikara
Domyślne ustawienia JVM nie są optymalne dla Minecraft. Flagi Aikara dostrajają garbage collector, dzięki czemu serwer rzadziej się zatrzymuje na czyszczenie pamięci. W panelu gry ustawiasz je w ustawieniach startu. Dla serwerów do 12 GB:
-XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1
Krok 6: sprawdź pluginy
Spark pokazuje dla każdego pluginu, ile czasu ticku zużywa. Plugin powyżej 5 ms na tick jest podejrzany. Usuń lub zastąp pluginy, które kosztują nieproporcjonalnie dużo czasu. Częsti winowajcy: clearlag (o ironio), stare pluginy hologramów i źle napisane pluginy minigier.
Czy więcej RAM pomoże przy niskim TPS?
Tylko jeśli serwerowi aktywnie brakuje pamięci (OutOfMemory w logach). Zwykle TPS to problem procesora, nie pamięci. 4 GB RAM z dobrymi ustawieniami działa lepiej niż 8 GB z domyślnymi ustawieniami.
Jaka jest różnica między TPS a MSPT?
TPS to liczba ticków na sekundę (cel: 20). MSPT to czas w milisekundach na tick (cel: poniżej 50). Przy MSPT powyżej 50 serwer nie jest w stanie utrzymać 20 ticków na sekundę i TPS spada. Spark pokazuje oba.
Czy muszę używać Paper dla dobrego TPS?
Nie jest to wymagane, ale zdecydowanie zalecane. Paper ma dziesiątki wbudowanych optymalizacji, których Vanilla i Spigot nie mają. Różnica na tym samym sprzęcie jest mierzalna: 5 do 30 procent niższe MSPT, w zależności od serwera.
Chcesz od razu zmierzyć? /spark tps działa na każdym serwerze Paper w HostValues. Zobacz pakiety Minecraft.