Domyślny garbage collector Javy nie jest zoptymalizowany pod serwery Minecraft. Flagi Aikar's konfigurują garbage collector G1, aby zminimalizować skoki lagów powodowane przez pauzy garbage collection. Są standardem dla każdego serwera Paper i Spigot.
Flagi
java -Xms10G -Xmx10G -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:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -jar server.jar --nogui
Zamień 10G na przydzielony RAM (np. 4G, 8G, 16G).
Dlaczego Xms powinno być równe Xmx
-Xms to początkowy rozmiar sterty. -Xmx to maksimum. Gdy się różnią, Java traci czas na powiększanie sterty pod obciążeniem, co powoduje skoki lagów. Ustawienie ich na tę samą wartość zmusza Javę do przydzielenia całej pamięci przy starcie, eliminując pauzy związane ze zmianą rozmiaru.
Co robią najważniejsze flagi
- UseG1GC: przełącza z domyślnego garbage collectora na G1, który lepiej radzi sobie z dużymi stertami.
- MaxGCPauseMillis=200: nakazuje G1 utrzymywać pauzy poniżej 200 ms. Nie zawsze się udaje, ale próbuje.
- G1NewSizePercent=30 / G1MaxNewSizePercent=40: przydziela 30 do 40% sterty na nowe obiekty. Minecraft tworzy dużo krótkotrwałych obiektów (chunki, pakiety, dane entity).
- AlwaysPreTouch: rezerwuje wszystkie strony pamięci przy starcie. Zapobiega przydzielaniu ich przez system operacyjny dopiero podczas gry.
- DisableExplicitGC: uniemożliwia pluginom wywoływanie
System.gc(), co powoduje pełne pauzy GC. - SurvivorRatio=32: duża przestrzeń survivor, aby obiekty dłużej pozostawały w młodej generacji przed promocją.
- MaxTenuringThreshold=1: promuje obiekty do starej generacji już po jednym cyklu GC. Obiekty Minecraft są albo bardzo krótkotrwałe, albo trwałe.
Jak ustawić
W panelu gier HostValues: przejdź do Startup, znajdź pole Java Arguments i wklej flagi (bez java i -jar server.jar; panel doda je automatycznie). Na VPS: edytuj swój skrypt startowy.
Dla serwerów z 12 GB+ RAM
Jeśli masz 12 GB lub więcej, zmień jedno ustawienie:
-XX:G1NewSizePercent=40 -XX:G1MaxNewSizePercent=50
Daje to więcej miejsca na nowe obiekty, co jest korzystne dla dużych serwerów z wieloma graczami.
Czy flagi Aikar's działają z Fabric lub Forge?
Tak. Flagi konfigurują JVM, nie oprogramowanie serwera. Działają z Paper, Spigot, Fabric, Forge i NeoForge.
Czy te flagi mogą rozwiązać problemy z TPS?
Rozwiązują skoki lagów powodowane przez garbage collection, rozpoznawalne jako okresowe zamrożenia (co 30 do 60 sekund). Nie rozwiązują problemów z TPS spowodowanych przez pluginy, redstone lub zbyt dużą liczbę entity.
Czy istnieją lepsze flagi dla Java 25?
Flagi Aikar's działają dobrze na Java 25. Niektórzy administratorzy serwerów eksperymentują z ZGC (-XX:+UseZGC), który obiecuje pauzy poniżej milisekundy. ZGC warto przetestować na serwerach 16 GB+, ale G1 z dostrojeniem Aikar's pozostaje sprawdzonym standardem.
Ustaw flagi JVM na każdym pakiecie Minecraft w HostValues przez zakładkę Startup.