Optymalizacja serwera Minecraft 1.21 Purpur: Flagi JVM Aikara i konfiguracja tick-loop
· 7 min czytania
Uruchomienie serwera Minecraft w wersji 1.21.x dla większej społeczności graczy wymaga starannego podejścia do zarządzania pamięcią operacyjną oraz optymalizacji wątku głównego (tzw. Server Thread). Domyślny silnik Vanilla oraz standardowa konfiguracja Spigota często nie radzą sobie ze stabilnym utrzymaniem 20.0 TPS (Ticks Per Second) przy intensywnej eksploatacji farm i dużej liczbie załadowanych chunków.
1. Dlaczego Purpur jest obecnie standardem branżowym?
Silnik Purpur to fork silników Paper oraz Pufferfish. Wprowadza on szereg niskopoziomowych poprawek w silniku gry:
- Asynchroniczne przetwarzanie chunków: Wykorzystanie wielu rdzeni procesora do generowania i odczytywania terenu bez blokowania głównego wątku logicznego.
- Optymalizacja ticków bytów (Entity Ticking): Możliwość uśpienia nieaktywnych mobów (DAB - Dynamic Activation Brain), co redukuje narzut obliczeniowy nawet o 40-60%.
- Wsparcie dla najnowszych mechanik: Pełna kompatybilność z protokołem 1.21.1 oraz starszymi klientami przy użyciu protokołów pośredniczących.
2. Optymalne Flagi Startowe JVM Aikara dla Javy 21
Prawidłowe skonfigurowanie maszyny wirtualnej Java (JVM) decyduje o braku mikroprzycięć (tzw. GC pauses). Standardowy algorytm Garbage Collector potrafi zatrzymać cały świat na kilkaset milisekund w celu zwolnienia nieużywanych obiektów. Flagi Aikara eliminują ten problem:
java -Xms10G -Xmx10G -XX:+UseG1GC \
-XX:+ParallelRefProcEnabled \
-XX:MaxGCPauseMillis=200 \
-XX:+UnlockExperimentalVMOptions \
-XX:+DisableExplicitGC \
-XX:+AlwaysPreTouch \
-XX:G1NewSizePercent=30 \
-XX:G1MaxNewSizePercent=40 \
-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 \
-Dusing.aikars.flags=https://mcflags.emc.gs \
-Daikars.new.flags=true \
-jar purpur.jar --nogui
-Xms (pamięć początkowa) oraz -Xmx (pamięć maksymalna) na dokładnie tę samą wartość. Zapobiega to dynamicznemu alokowaniu i zwalnianiu pamięci przez system operacyjny, co stabilizuje czas klatki serwera.
3. Kluczowe parametry w plikach konfiguracyjnych
Plik pufferfish.yml:
Upewnij się, że opcja dynamicznego usypiania AI dla mobów jest włączona:
dab:
enabled: true
max-tick-freq: 20
activation-dist-mod: 8
Plik purpur.yml:
Wyłącz niepotrzebne sprawdzanie raycastów i zredukuj obciążenie ticków:
settings:
use-alternate-keepalive: true
lagging-threshold: 19.0
gameplay-mechanics:
mob-last-hurt-by-player-time: 100
4. Monitoring i analiza Profilerem (Spark)
Zamiast przestarzałego Timings v1, w nowoczesnych środowiskach 1.21 standardem jest wbudowany plugin Spark. Komenda /spark sampler --timeout 120 generuje interaktywny raport drzewa wywołań CPU w przeglądarce, pozwalając precyzyjnie zlokalizować plugin lub moba generującego spadek TPS.