
Minecraft Plugin-Server optimieren 2026 – Paper & Spigot Tuning
Minecraft Plugin-Server optimieren 2026: Paper & Spigot Tuning mit Aikar-Flags, Spark-Profiling, Chunk-Pregen und konkreten Werten für stabile 20 TPS.
Palworld nutzt ein striktes Versions-Matching zwischen Client und Dedicated Server. Schiebt Steam auf der Client-Seite ein Update aus, können Spieler mit alter Serverversion nicht mehr joinen – sie sehen lediglich „Incompatible Version" im Serverbrowser. Umgekehrt gilt: Wenn du den Server updatest, aber die Save-Kompatibilität nicht prüfst, riskierst du korrupte Level.sav-Dateien.
Dazu kommt der Faktor Zeit. Große Content-Updates erscheinen häufig zwischen 02:00 und 06:00 UTC. Ohne Automatisierung stehst du nachts am Terminal oder dein Server läuft tagelang veraltet. Mit einem sauberen Update-Skript plus systemd-Timer oder Docker-Auto-Update erledigt sich das.
Wipes sind das zweite große Thema. Nach Map-Änderungen, Pal-Refactors oder wenn die Wirtschaft auf dem Server durch Exploits zerstört wurde, hilft oft nur ein kontrollierter Reset. Der Unterschied zwischen einem professionellen Wipe und einem Datenverlust ist meist nur die Vorbereitung: Ankündigung, Backup, selektive Löschung statt rm -rf.
Der Palworld Dedicated Server läuft über SteamCMD mit der App-ID 2394010 und ist kostenlos (anonymous login). Auf der Client-Seite ist es App-ID 1623730. Beide müssen auf demselben buildid stehen.
Die aktuelle Build-ID deines Servers liest du so aus:
steamcmd +login anonymous +app_info_print 2394010 | grep -m1 buildid
Pocketpair pflegt mehrere Branches. Der public-Branch ist der stabile Standard. Für Tests gibt es zeitweise Beta-Branches, die du mit -beta in SteamCMD aktivierst:
steamcmd +force_install_dir /opt/palworld/server \
+login anonymous \
+app_update 2394010 -beta preview validate \
+quit
Für Produktionsserver gilt: niemals ungeprüft auf einen Preview-Branch wechseln. Setze stattdessen auf ein Staging-System, das du vor dem Live-Rollout testest.
Die 3-2-1-Regel gilt auch hier: drei Kopien, zwei Medien, eine extern. Ein Palworld-Save besteht aus mehreren Dateien und wächst mit der Spielzeit. Bei 32 Spielern und ausgebauten Basen liegt Level.sav schnell bei 40–90 MB, das komplette Save-Verzeichnis bei 150–400 MB.
Ein einfaches, zuverlässiges Backup-Skript:
#!/bin/bash
set -euo pipefail
SAVE_DIR=/opt/palworld/server/Pal/Saved/SaveGames/0
STAMP=$(date +%Y%m%d-%H%M)
tar czf /backup/palworld-$STAMP.tar.gz -C "$SAVE_DIR" .
find /backup -name 'palworld-*.tar.gz' -mtime +14 -delete
echo "Backup fertig: /backup/palworld-$STAMP.tar.gz"
Wichtig: Vor dem Tarball immer Save per RCON auslösen oder den Server stoppen. Ein Backup aus dem laufenden Betrieb kann inkonsistente Players/-Dateien enthalten, weil Palworld asynchron in 30-Sekunden-Intervallen speichert (AutoSaveSpan=30.0).
Für maximale Sicherheit lädst du das Archiv zusätzlich per rclone oder restic in einen S3-Bucket oder zu einem zweiten Hoster. Speicher kostet 2026 bei den meisten Anbietern 0,005–0,02 € pro GB und Monat – bei 400 MB Savegröße also praktisch nichts.
Der manuelle Update-Ablauf für einen nativ installierten Server sieht so aus:
Broadcast Server-Update in 5 MinutenSave per RCON auslösen, dann DoExit sendensystemctl status palworld)Der Update-Befehl selbst:
steamcmd +force_install_dir /opt/palworld/server \
+login anonymous \
+app_update 2394010 validate \
+quit
validate prüft alle Dateien gegen die Steam-Manifeste und repariert beschädigte Binaries. Der Download liegt je nach Update bei 1–5 GB; auf NVMe dauert das 30–90 Sekunden, auf SATA-SSD 2–4 Minuten.
Danach prüfst du die neue Build-ID und startest über systemd:
systemctl start palworld
journalctl -u palworld -f --since "2 min ago"
Ein Update-Skript, das nur bei tatsächlicher Änderung neu startet, spart dir unnötige Downtime:
#!/bin/bash
set -euo pipefail
APP=2394010
DIR=/opt/palworld/server
BEFORE=$(steamcmd +login anonymous +app_info_print $APP | grep -m1 buildid | tr -d ' "')
steamcmd +force_install_dir $DIR +login anonymous +app_update $APP validate +quit
AFTER=$(steamcmd +login anonymous +app_info_print $APP | grep -m1 buildid | tr -d ' "')
if [ "$BEFORE" != "$AFTER" ]; then
echo "Update erkannt: $BEFORE -> $AFTER"
exit 10
fi
exit 0
In der systemd-Unit nutzt du ExecStartPre mit diesem Skript. Der Exit-Code 10 signalisiert ein Update, woraufhin du per OnFailure oder einem Wrapper einen Neustart und eine Discord-Benachrichtigung auslöst.
Alternativ ein systemd-Timer, der stündlich prüft:
[Unit]
Description=Palworld Update Check
[Timer]
OnCalendar=hourly
Persistent=true
[Install]
WantedBy=timers.target
Für die Benachrichtigung reicht ein curl-POST auf einen Discord-Webhook. So weiß dein Team sofort, wenn ein neuer Build live ist, ohne dass jemand Logs durchwühlen muss.
Der Großteil der gemieteten Palworld-Server läuft 2026 in Docker. Das verbreitetste Image ist thijsvanloef/palworld-server-docker. Eine typische Compose-Datei:
services:
palworld:
image: thijsvanloef/palworld-server-docker:latest
restart: unless-stopped
ports:
- "8211:8211/udp"
- "27015:27015/udp"
- "25575:25575/tcp"
environment:
- PUID=1000
- PGID=1000
- PORT=8211
- PLAYERS=16
- SERVER_NAME=Hostazar Palworld
- SERVER_PASSWORD=geheim123
- ADMIN_PASSWORD=admin123
- RCON_ENABLED=true
- RCON_PORT=25575
- AUTO_UPDATE_ENABLED=true
- AUTO_UPDATE_CRON_EXPRESSION=0 4 * * *
- BACKUP_ENABLED=true
- BACKUP_CRON_EXPRESSION=0 */6 * * *
volumes:
- ./palworld:/palworld/
Der Container prüft per Cron selbst auf neue Steam-Builds und startet bei Bedarf neu. Wichtig ist das Volume-Mapping: Nur wenn ./palworld auf dem Host liegt, überlebt dein Save ein docker compose down oder einen Image-Wechsel.
Update-Zyklus im Container-Betrieb:
docker compose pull
docker compose up -d
docker compose logs -f palworld
Der latest-Tag ist bequem, aber nicht reproduzierbar. Für Produktionsserver pinne die Version, z. B. :v0.30.0, und aktualisiere bewusst nach Test.
Bevor du irgendetwas löschst, musst du wissen, was wo liegt. Unter Linux:
Pal/Saved/SaveGames/0/<32-Zeichen-SaveID>/
├── Level.sav
├── LevelMeta.sav
├── WorldOption.sav
├── GlobalPalStorage.sav
└── Players/
├── 00000000000000000000000000000001.sav
└── 00000000000000000000000000000002.sav
Level.sav enthält die komplette Welt: Basen, Container, Pals in der Welt, Item-Drops. LevelMeta.sav speichert Metadaten wie Spielerliste und Zeitstempel. Players/ enthält pro Spieler eine Datei mit Inventar, Statuen-Upgrades und Pal-Team. WorldOption.sav enthält Welt-spezifische Settings.
Die <SaveID> muss exakt dem DedicatedServerName-Eintrag in Pal/Saved/Config/LinuxServer/GameUserSettings.ini entsprechen. Stimmen die nicht überein, startet der Server mit einer leeren Welt – ein Klassiker nach Migrationen.
| Wipe-Typ | Was wird gelöscht | Einsatz | Aufwand |
|---|---|---|---|
| Full Wipe | Komplettes Save-Verzeichnis | Neue Season, Map-Reset | 5 Minuten |
| Map Wipe | Level.sav + LevelMeta.sav | Basis-Reset, Spieler bleiben | 10 Minuten |
| Player Wipe | Inhalte von Players/ | Exploit-Reset einzelner Accounts | 5 Minuten |
| Selective Wipe | Einzelne Basen/Gilden via Save-Editor | Griefing-Fälle | 1–3 Stunden |
Ein Full Wipe ist trivial: Server stoppen, Backup ziehen, Save-Verzeichnis umbenennen statt löschen, Server starten. Palworld generiert automatisch eine neue Welt mit neuer SaveID.
Ein Map Wipe ohne Spielerverlust ist heikler, weil Players/ auf Objekte in Level.sav referenziert. Entfernst du die Welt, aber behältst die Spielerdateien, kann der Server beim Laden crashen. Sauberer Weg: Spielerdateien mit palworld-save-tools bearbeiten und Referenzen auf gelöschte Basen entfernen – oder die Spieler vorher ausloggen lassen und Inventar manuell über die JSON-Konvertierung zurücksetzen.
Ein Serverumzug ist der häufigste Grund für Datenverlust. Der Ablauf:
Pal/Saved/SaveGames/0/ kopierenDedicatedServerName in GameUserSettings.ini auf die SaveID setzenchown -R palworld:palworld Pal/SavedLoaded world prüfenWechselt der Hosting-Anbieter, ändert sich häufig die SteamID/GUID des Server-Accounts. Dann hilft palworld-host-save-fix:
python palworld-host-save-fix.py \
--save-path /opt/palworld/server/Pal/Saved/SaveGames/0/<SaveID> \
--old-guid <ALTER_GUID> \
--new-guid <NEUER_GUID>
Das Skript schreibt die GUID in Level.sav und allen Spielerdateien um. Ohne diesen Schritt landen alle Spieler als „Unknown" auf einem neuen Charakter-Level – ihre Pals und Basen sind dann zwar noch da, aber nicht mehr zugeordnet.
Manchmal bricht ein Update das Gameplay oder den Serverstart. Ein Downgrade ist über SteamCMD möglich, aber aufwendig: Du brauchst die Manifest-ID der Vorversion und lädst sie über download_depot:
steamcmd +login anonymous \
+download_depot 2394010 2394011 <MANIFEST_ID>
Der Depot-Download landet in ~/.steam/steamcmd/steamapps/content/app_2394010/ und muss manuell ins Serververzeichnis kopiert werden. Wichtiger Hinweis: Ein Downgrade des Servers ohne Downgrade der Clients funktioniert nicht – Steam aktualisiert Clients automatisch. Ein Rollback ist daher nur sinnvoll, wenn du gleichzeitig den Server offline nimmst und auf einen Fix wartest.
Die deutlich pragmatischere Strategie: Vor jedem Update ein Vollbackup, dann im Fehlerfall auf den letzten kompatiblen Stand zurück. Plane dafür 15–30 Minuten Downtime ein.
Ein Wipe ohne Ankündigung kostet dich die halbe Spielerbasis. Nutze RCON für Broadcasts im Spiel:
rcon-cli --host 127.0.0.1 --port 25575 --password admin123 \
"Broadcast Server-Wipe am Samstag 20:00 CET - Details im Discord"
rcon-cli --host 127.0.0.1 --port 25575 --password admin123 "Save"
rcon-cli --host 127.0.0.1 --port 25575 --password admin123 "ShowPlayers"
rcon-cli --host 127.0.0.1 --port 25575 --password admin123 "DoExit"
Verfügbare RCON-Befehle in Palworld sind überschaubar: Broadcast, Save, ShowPlayers, KickPlayer, BanPlayer, UnBanPlayer, Info, DoExit. Für alles andere brauchst du Dateizugriff oder Save-Editoren.
Ergänze RCON um einen Discord-Bot oder Webhook, der Update-Status, Spielerzahlen und Backup-Erfolge postet. Das reduziert Support-Anfragen drastisch, weil Spieler selbst sehen, wann der Server wieder online ist.
Diese Reihenfolge hat sich in der Praxis bewährt:
Save senden, dann DoExitFür das Monitoring reichen htop, docker stats und ein Blick in die Server-Logs. Achte auf RAM-Auslastung: Palworld leakt historisch bei langen Uptimes. Ein wöchentlicher geplanter Neustart um 05:00 UTC ist 2026 weiterhin eine gute Idee.
| Spieler | RAM | CPU | Preis/Monat |
|---|---|---|---|
| 4–8 | 8 GB | 2 vCores | 7–12 € |
| 8–16 | 12–16 GB | 4 vCores | 14–22 € |
| 16–32 | 24–32 GB | 6 vCores | 25–40 € |
| 32+ (modded) | 32–64 GB | 8 vCores | 45–70 € |
NVMe-Speicher ist Pflicht. Save-Writes sind bei 30-Sekunden-Intervallen häufig, und auf langsamen SATA-SSDs siehst du regelmäßig Lags beim Autosave. Achte außerdem auf unbegrenzten Traffic – ein 32-Slot-Server zieht bei aktivem Spiel leicht 500 GB bis 1 TB pro Monat.
Pocketpair veröffentlicht kleinere Patches oft wöchentlich, größere Content-Updates alle 6–12 Wochen. Da Clients automatisch patchen, ist ein stündlicher Update-Check per systemd-Timer oder Docker-Auto-Update die sicherste Variante. Plane für den Neustart 2–3 Minuten Downtime ein.
Nein, wenn du vorher ein Backup ziehst. Palworld-Saves sind in der Regel abwärtskompatibel innerhalb der Early-Access- und 1.x-Reihe. Kritisch wird es nur, wenn du den Server downgradest oder ein Save mit neuerer Version auf einen älteren Server kopierst. Genau deshalb gehört ein Tarball-Backup vor jedes Update.
Ein Full Wipe löscht das komplette Save-Verzeichnis inklusive aller Spielerdateien – alles beginnt bei null. Ein Map Wipe löscht nur Level.sav und LevelMeta.sav, sodass Spieler-Level und Inventar theoretisch erhalten bleiben. In der Praxis musst du bei einem Map Wipe die Spielerdateien nachbearbeiten, sonst crasht der Server beim Laden wegen ungültiger Objektreferenzen.
Server stoppen, Save-Verzeichnis als Tarball sichern, auf dem Zielserver dieselbe Palworld-Version installieren, Ordner nach Pal/Saved/SaveGames/0/ kopieren und den DedicatedServerName in GameUserSettings.ini auf die SaveID setzen. Ändert sich die Server-GUID, brauchst du zusätzlich palworld-host-save-fix, sonst verlieren Spieler ihre Charakterzuordnung.
Nur eingeschränkt. RCON unterstützt in Palworld lediglich Broadcast, Save, ShowPlayers, KickPlayer, BanPlayer, UnBanPlayer, Info und DoExit. Für echte Wipe-Aktionen musst du auf Dateisystemebene arbeiten oder einen Save-Editor wie palworld-save-tools einsetzen. RCON eignet sich hervorragend für die Ankündigung und den sauberen Shutdown davor.