# Hytale Server Performance

## Vorher/Nachher (RAM/Cache/Buffer)

**Beispiel-Messung:**

![Memory Basic](/files/kBlDkK3Bp5L9UJ5Od0h1)

***

Ziel: stabile TPS (weniger Ruckler), geringerer RAM-Druck (weniger Chunk-/Objekt-Müll), weniger Crash-Risiko unter Last.\
Wir machen dafür drei Dinge: (1) Java-Startcommand optimieren, (2) Performance-Saver-Addon nutzen, (3) `config.json` passend setzen.

***

## 1) Neuer Startcommand (Java-Flags)

Dieser Startcommand zielt auf **stabilere Tick-Zeiten** (weniger Lag-Spitzen) und **bessere Speicherkontrolle** durch eine für Server typische G1GC-Konfiguration.

### Startcommand

```bash
java -XX:AOTCache=Server/HytaleServer.aot -Xms2048M -Xmx8192M -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:G1NewSizePercent=35 -XX:G1MaxNewSizePercent=60 -XX:G1HeapRegionSize=16M -XX:G1ReservePercent=15 -XX:InitiatingHeapOccupancyPercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:G1MixedGCLiveThresholdPercent=90 -XX:+ParallelRefProcEnabled -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20 -jar Server/HytaleServer.jar --assets Assets.zip -bind 0.0.0.0:3500
```

### Parameter-Erklärung

#### A) AOT / Start-Performance

* `-XX:AOTCache=Server/HytaleServer.aot`\
  Aktiviert einen AOT-Cache (Ahead-of-Time). Kann Start-/Warmup-Zeiten und Hotspot-Performance verbessern (abhängig von JVM/Build/Workload).

#### B) Heap-Größen (RAM-Budget)

* `-Xms2048M`\
  Initiale Heap-Größe: Java reserviert beim Start \~2 GB. Reduziert dynamische Heap-Vergrößerungen in der Startphase.
* `-Xmx8192M`\
  Maximale Heap-Größe: Obergrenze für Java-RAM. Verhindert Out-of-Memory bei Lastspitzen, erhöht aber nicht automatisch die Performance.

#### C) Garbage Collector (G1GC) + Latenzziel

* `-XX:+UseG1GC`\
  Verwendet G1GC (Region-basierter Collector), typischer Standard für Server mit mehreren GB Heap.
* `-XX:MaxGCPauseMillis=100`\
  Zielwert für maximale GC-Pausen. G1GC versucht, die Arbeit so zu planen, dass Pausen im Bereich dieses Ziels bleiben (Best-Effort, keine Garantie).

#### D) Schutz vor ungünstigen `System.gc()`-Aufrufen

* `-XX:+DisableExplicitGC`\
  Ignoriert explizite GC-Trigger (z. B. durch Plugins). Reduziert Risiko großer, unplanbarer Pausen.

#### E) Young-Gen-Größe (kurzlebige Objekte effizient entsorgen)

* `-XX:G1NewSizePercent=35`\
  Untergrenze für den Anteil des Young Gen am Heap (Startpunkt/Minimum).
* `-XX:G1MaxNewSizePercent=60`\
  Obergrenze für den Anteil des Young Gen. Mehr Young Gen kann die Verarbeitung vieler kurzlebiger Objekte stabilisieren.

#### F) Region-Größe

* `-XX:G1HeapRegionSize=16M`\
  Setzt die Region-Größe auf 16 MB. Bei großen Heaps kann das Verwaltungsaufwand senken; Trade-off: gröbere Granularität.

#### G) Reserve + früheres Starten der Concurrent-Phase

* `-XX:G1ReservePercent=15`\
  Reserviert freie Regionen als Puffer. Senkt das Risiko, dass der Heap unter Last „zu knapp“ wird.
* `-XX:InitiatingHeapOccupancyPercent=20`\
  Startet die concurrent marking/collection Phase bei relativ niedriger Heap-Auslastung. Ziel: frühzeitig mit dem Aufräumen beginnen, bevor Druck entsteht.

#### H) Mixed-GC-Steuerung (Old-Gen schrittweise bereinigen)

* `-XX:G1HeapWastePercent=5`\
  Schwelle, ab der G1 Regionen als „lohnend“ für Mixed GCs betrachtet (weniger tolerierter „Waste“ → tendenziell früheres Aufräumen).
* `-XX:G1MixedGCCountTarget=4`\
  Zielanzahl Mixed-GCs, um Old-Gen-Bereinigung über mehrere Zyklen zu verteilen.
* `-XX:G1MixedGCLiveThresholdPercent=90`\
  Regionen mit sehr hohem Live-Anteil werden seltener in Mixed-GCs aufgenommen (Priorisierung der „profitablen“ Regionen).

#### I) Parallelisierung

* `-XX:+ParallelRefProcEnabled`\
  Parallelisiert Reference Processing (z. B. Soft/Weak/Phantom References). Kann Pausen reduzieren.

#### J) Heap-Free-Ratio (Wachstum/Schrumpfen des Heaps)

* `-XX:MinHeapFreeRatio=10`
* `-XX:MaxHeapFreeRatio=20`\
  Steuert, wie viel „freier“ Heap Java nach GC anstrebt. Niedrigere Werte können dazu führen, dass Java weniger freien Heap vorhält (workload-/plattformabhängig).

#### K) Serverstart / Netzwerk

* `-jar Server/HytaleServer.jar`\
  Startet das Server-JAR.
* `--assets Assets.zip`\
  Lädt die Assets.
* `-bind 0.0.0.0:3500`\
  Bindet an alle Interfaces auf Port 3500 (extern erreichbar, sofern Firewall/Portforwarding korrekt).

***

## 2) MC-HOST24 Performance Saver Addon

Download: Profilseite → **Downloads** → **Performance Saver**.

[Direktlink: MC-HOST24 Downloads](https://mc-host24.de/account#downloads)

![MC-HOST24 – Downloads → Performance Saver](/files/xfdlGdutgoSi0XgpYjs0)

Das Addon reduziert Lastspitzen und stabilisiert den Betrieb. Es setzt an drei Punkten an:

### TPS Limiting (stabil statt maximal)

* Stabilere TPS sind oft besser als hohe, aber schwankende TPS (Client-Prediction + Netzwerk reagieren sensibel auf Schwankungen).
* Das Addon kann TPS auf einen festen Wert begrenzen (Standard: **20 TPS**).
* Wenn der Server leer ist, reduziert es TPS zusätzlich (Standard: **5 TPS**) → spart CPU und indirekt RAM-Druck.

**Effekt:** weniger CPU-Spitzen → weniger GC-Stress → weniger Mikrolags.

### Dynamische View-Radius-Anpassung (Sichtweite nach Ressourcenlage)

* Hohe Sichtweite = mehr aktive Chunks = mehr Entities/Daten = mehr CPU + mehr RAM.
* Das Addon erkennt:
  * **CPU-Druck** über sinkende TPS,
  * **RAM-Druck** über häufige GC-Versuche der JVM.
* Bei Druck wird die Sichtweite automatisch reduziert, um Ressourcen freizumachen.
* Erholt sich der Server, wird die Sichtweite schrittweise wieder erhöht.

**Effekt:** verhindert ressourcenbedingte Abstürze, besonders unter Last/Stress.

### Zusätzliche Garbage Collection (nur aktiv wenn es wahrscheinlich hilft)

* Java gibt ungenutzten Speicher nicht immer sofort frei, besonders nach Lastspitzen.
* Das Addon beobachtet geladene Chunks und triggert eine zusätzliche GC, wenn sehr wahrscheinlich Speicher freigeworden ist.

**Effekt:** weniger „toter Ballast“ im RAM nach Peak-Situationen.

### Installation

* downloade das Addon als .jar von der MC-HOST24 Webseite ([Direktlink: MC-HOST24 Downloads](https://mc-host24.de/account#downloads))
* uploade diese .jar dann in den mods/ Ordner von deinem Hytale Server
* restarte anschließend deinen Server

***

## 3) `config.json` anpassen

```json
"performance": {
  "chunkLoadingOptimization": true,
  "reducedViewDistance": true,
  "optimizedGarbageCollection": true
}
```

### Bedeutung der Optionen

* `chunkLoadingOptimization: true`\
  Effizienteres Chunk-Handling → weniger CPU-Spitzen + weniger temporäre Speicherlast.
* `reducedViewDistance: true`\
  Reduziert Grundlast durch weniger Sichtweite/Chunks → direkt weniger RAM/CPU.
* `optimizedGarbageCollection: true`\
  Unterstützt GC-freundlicheres Verhalten → weniger Peaks/Fragmentierung.

***


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.mc-host24.de/docs/hytale-server/performance.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
