JVM Flags (Aikars Flags)

Achter elke Minecraft server draait de Java Virtual Machine (JVM). Dit is het programma dat je Minecraft server-software uitvoert. Door de JVM slim te configureren met zogenaamde "flags" (opstart-parameters), kun je de performance van je server aanzienlijk verbeteren. De bekendste en meest gebruikte set flags zijn de Aikars Flags.

Wat zijn JVM Flags?

JVM flags zijn opstart-parameters die je meegeeft aan Java wanneer je server opstart. Ze vertellen de JVM hoe hij met geheugen moet omgaan, wanneer hij moet opruimen (garbage collection) en hoe hij moet optimaliseren. Denk aan het als het afstellen van een auto-motor: de motor werkt zonder aanpassingen, maar met de juiste instellingen presteert hij een stuk beter.

Zonder geoptimaliseerde flags gebruikt Java standaardinstellingen die niet specifiek voor Minecraft zijn afgestemd. Dit kan leiden tot:

  • Lag spikes door ongeoptimaliseerde garbage collection (het opruimen van ongebruikt geheugen)
  • Inefficient geheugengebruik waardoor je server meer RAM verbruikt dan nodig
  • Langere pauzes wanneer de JVM besluit om geheugen op te ruimen

Waarom Aikars Flags de standaard zijn

Aikar is een bekende ontwikkelaar uit de Minecraft community (hij is ook een van de ontwikkelaars achter PaperMC). Hij heeft jarenlang onderzoek gedaan naar de optimale JVM-instellingen specifiek voor Minecraft servers. Zijn flags zijn inmiddels de industriestandaard en worden aanbevolen door vrijwel elke serverhosting en elk serverplatform.

De Aikars Flags zijn specifiek ontworpen om:

  • Garbage collection te optimaliseren - Minecraft genereert en verwijdert constant objecten in het geheugen (chunks laden/ontladen, entities spawnen/despawnen). Aikars flags gebruiken de G1GC garbage collector met instellingen die ervoor zorgen dat het opruimen in kleine, snelle stappen gebeurt in plaats van grote pauzes.
  • Lag spikes te minimaliseren - Door de garbage collection in kleinere stukken op te delen, voorkom je die beruchte "freeze"-momenten waarop de hele server even stilvalt.
  • Geheugen efficienter te gebruiken - De flags zorgen ervoor dat Java het toegewezen RAM optimaal benut, zonder te veel te verspillen aan overhead.

Hoe stel je JVM Flags in via het HytaleNode paneel?

Het instellen van JVM flags op HytaleNode is eenvoudig:

  1. Ga naar mijn.hytalenode.nl en open je server.
  2. Klik op de Startup tab in het linkermenu.
  3. Hier zie je diverse opstartvariabelen. Zoek naar het veld voor JVM Flags of Additional Java Flags.
  4. Plak hier de Aikars Flags (zie hieronder).
  5. Klik op Opslaan en herstart je server.

Goed nieuws: HytaleNode stelt de Aikars Flags standaard al in voor nieuwe servers. Je hoeft dus normaal gesproken niets te veranderen. Maar het is goed om te weten wat ze doen en hoe je ze kunt aanpassen als dat nodig is.

De Aikars Flags

Hieronder staan de volledige Aikars Flags. De -Xms en -Xmx waardes worden automatisch ingesteld op basis van het RAM dat aan je server is toegewezen bij HytaleNode.

-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

Uitleg van de belangrijkste flags

Je hoeft niet alles te begrijpen, maar hier is een overzicht van wat de belangrijkste flags doen:

  • -XX:+UseG1GC - Gebruik de G1 (Garbage First) garbage collector. Dit is de beste garbage collector voor Minecraft servers omdat hij grote geheugenhoeveelheden efficient kan beheren met minimale pauzes.
  • -XX:MaxGCPauseMillis=200 - De garbage collector probeert pauzes onder 200 milliseconden te houden. Dit voorkomt lange freeze-momenten.
  • -XX:+AlwaysPreTouch - Reserveert al het RAM direct bij het opstarten in plaats van het geleidelijk toe te wijzen. Dit voorkomt vertragingen later wanneer de server meer geheugen nodig heeft.
  • -XX:G1NewSizePercent=30 en G1MaxNewSizePercent=40 - Reserveert 30–40% van het geheugen voor nieuwe objecten. Minecraft maakt constant nieuwe objecten aan, dus een groter "nursery" gebied zorgt voor minder frequente garbage collection.
  • -XX:G1HeapRegionSize=8M - Deelt het geheugen op in regio's van 8 MB. Dit is geoptimaliseerd voor hoe Minecraft geheugen gebruikt.
  • -XX:SurvivorRatio=32 - Bepaalt de verhouding voor objecten die meerdere garbage collection-cycli overleven. De waarde 32 is geoptimaliseerd voor Minecraft's geheugenpatronen.
  • -XX:MaxTenuringThreshold=1 - Objecten die een enkele garbage collection overleven worden direct naar het langetermijngeheugen verplaatst. Dit is efficient omdat de meeste Minecraft-objecten ofwel heel kort leven (items, particles) of heel lang (chunks, permanente entities).
  • -XX:+ParallelRefProcEnabled - Verwerkt referenties parallel op meerdere CPU-cores, wat het opruimproces versnelt.
  • -XX:+DisableExplicitGC - Voorkomt dat plugins handmatig een volledige garbage collection kunnen triggeren, wat voor lag spikes kan zorgen.

Veelgemaakte fouten

  • Te veel RAM toewijzen - Meer RAM is niet altijd beter. Als je 2 GB nodig hebt maar 8 GB toewijst, moet de garbage collector een veel groter geheugengebied doorzoeken, wat juist voor langere pauzes kan zorgen. Gebruik wat je nodig hebt en houd je aan je HytaleNode plan.
  • Xms en Xmx op verschillende waardes zetten - Zet -Xms (minimum RAM) en -Xmx (maximum RAM) altijd op dezelfde waarde. Dit voorkomt dat de JVM constant geheugen moet aanvragen en vrijgeven. HytaleNode doet dit al automatisch.
  • Andere garbage collectors gebruiken - Tenzij je precies weet wat je doet, blijf bij G1GC met Aikars instellingen. Andere collectors zoals ZGC of Shenandoah kunnen in specifieke situaties beter zijn, maar voor de meeste Minecraft servers zijn Aikars Flags de beste keuze.
JVM Flags (Aikars Flags) | Kennisbank | HytaleNode