Serveur Minecraft qui lag : solutions pour améliorer les performances
Publié le 08/12/2025
Les lags proviennent de trois familles principales : calcul serveur (CPU / entités / redstone), mémoire (RAM / pauses GC) et entrées-sorties (disque / réseau). Viser des TPS à ~20 et un MSPT < 50ms (idéalement < 25ms) est l’objectif. Ce guide propose une méthode reproductible pour diagnostiquer et corriger les problèmes, des réglages concrets côté Paper/Spigot/Bukkit, des recommandations JVM, et des conseils matériel (CPU/RAM/stockage/réseau) adaptés aux gros serveurs.
Sommaire
- Comprendre le lag (TPS, MSPT, Ping)
- Méthode de diagnostic reproductible
- RAM : quantités réalistes, Xms/Xmx, GC
- CPU : prioriser le mono‑thread et le MSPT
- Disque et IO : NVMe, auto-save, backups
- Configs Paper/Spigot/Bukkit optimisées
- Monde & chunks : pré‑génération, distances
- Entités, hoppers, redstone : gros impacts
- Plugins : profiler, trier, remplacer
- Réseau & proxy : latence, compression
- Hébergement : CPU/RAM DDR5, anti‑DDoS
- Checklist actionnable
1) Comprendre le lag
- Lag serveur (tick lent) : TPS < 20, MSPT élevé. Causé par IA/entités, redstone, génération de chunks, plugins lourds, disques lents.
- Lag réseau : ping/packet‑loss. Sensible à la distance, au peering, aux attaques DDoS, à la saturation.
- Lag client : FPS bas, shaders, pack lourds. Non imputable au serveur.
Mesures clés : /tps (Vue globale), /mspt (Paper), /timings et Spark pour profiler finement.
2) Méthode de diagnostic reproductible
- Baseline : passez sur Paper (au minimum) avec Java 17/21, désactivez les plugins non essentiels, laissez tourner 30min.
- Timings :
/timings on→ laissez 10-15min avec joueurs →/timings pasteet analysez les sections lourdes (entités, tâches). - Spark (recommandé) :
Inspectez les hotspots : tâches de plugins, pathfinding, hoppers, redstone./spark profiler --timeout 300 /spark profiler stop /spark profiler view - Hypothèses → tests ciblés : réduisez simulation-distance, limitez entités, ajustez hoppers, pré‑générez les chunks… puis re-testez.
Règle d’or : changez une chose à la fois, mesurez 15–30min, comparez TPS/MSPT et résultats Spark. Documentez vos réglages.
3) RAM : quantités, Xms/Xmx, GC
- Repères réalistes (hébergeurs/retours terrain)
- 6–8 Go : Vanilla/Paper, 10–30 joueurs, <25 plugins.
- 12–16 Go : 50–100 joueurs, 40–60 plugins, plusieurs mondes (cible classique 50+ joueurs/50 plugins).
- 16–24 Go : 100+ joueurs, hubs, anti‑cheat, gros logs.
- 24–32 Go et + : modpacks Forge/Fabric lourds.
- DDR5/Fréquence : privilégiez de la DDR5 5200–6000 MHz (ECC si dispo). La latence mémoire impacte les pauses GC.
- Ne pas sur‑allouer : laissez 2–4 Go à l’OS/panels/DB. Trop de RAM non profilée = pauses GC plus longues.
- Allocation Java :
Xms=Xmxpour éviter les redimensionnements.java -Xms8G -Xmx8G -jar server.jar # serveur moyen java -Xms16G -Xmx16G -jar server.jar # gros serveur (50+ joueurs, 50 plugins) - GC : G1GC (Java 17/21) par défaut, stable. ZGC (Java 21) possible >16Go si tests concluants. Évitez d’empiler des flags sans mesure.
Exemple de flags (point de départ raisonnable G1GC)
-XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200
-XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC
-XX:InitiatingHeapOccupancyPercent=15 -XX:G1NewSizePercent=20 -XX:G1MaxNewSizePercent=60
-XX:G1HeapRegionSize=16M -XX:G1ReservePercent=20 -XX:G1MixedGCCountTarget=4
-XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1
Mesurez toujours avec Spark avant/après. Toute config JVM doit être validée empiriquement.
4) CPU : prioriser le mono‑thread et le MSPT
- Fréquence > cœurs : le tick reste majoritairement mono‑thread. Favorisez des CPU à forte perf single‑core (ex. Ryzen 7 5800X3D, 7800X3D, 7950X/7950X3D ; Intel 13600K/13900K/14900K).
- Gouverneur : en dédié Linux,
performanceplutôt queondemand. Évitez l’over‑commit CPU en VPS. - Conteneurs/VM : attention à la latence de scheduling ; réservez des cœurs, limitez le “bruit” des voisins.
- Objectif : MSPT < 25ms en charge ; au‑delà de 50ms, vous ressentirez des saccades.
5) Disque & IO : NVMe, auto‑save, backups
- NVMe recommandé. Évitez HDD/SSD SATA bas de gamme. Les IO de chunks et sauvegardes sont coûteux.
- Auto‑save : évitez les sauvegardes au milieu des pics.
/save-off # avant une grosse opération (pré-génération, migration) save-all /save-on - Backups : planifiez hors‑charge (ex. de nuit), incrémentaux, en excluant
/logsmassifs. Pensez à rclone, restic.
6) Réglages Paper/Spigot/Bukkit (exemples concrets)
Ces valeurs sont des points de départ. Ajustez selon votre gameplay et mesurez.
bukkit.yml
settings:
allow-end: true
warn-on-overload: false
query-plugins: false
chunk-gc:
period-in-ticks: 600
ticks-per:
animal-spawns: 400
monster-spawns: 4
autosave: 6000
spigot.yml
world-settings:
default:
merge-radius:
exp: 3.0
item: 2.5
entity-activation-range:
animals: 16
monsters: 24
raiders: 32
misc: 8
entity-tracking-range:
players: 48
animals: 48
monsters: 48
misc: 32
tick-inactive-villagers: true
nerf-spawner-mobs: true
hopper-amount: 1
hopper-transfer: 8
hopper-check: 8
view-distance: 8
paper-global.yml (ou paper.yml)
timings:
enabled: true
chunk-loading:
global-max-chunk-load-rate: 100.0
player-max-chunk-load-rate: 20.0
unsupported-settings:
allow-permanent-block-break-exploits: false
world-settings:
default:
despawn-ranges:
soft: 28
hard: 96
per-player-mob-spawns: true
optimize-explosions: true
max-auto-save-chunks-per-tick: 8
prevent-moving-into-unloaded-chunks: true
fix-climbing-bypassing-cramming-rule: true
armor-stands:
tick: false
do-collision-entity-lookups: false
mobs:
spawn-cap:
monsters: 70
animals: 10
villager:
brain-ticks: 2
redstone-implementation: ALTERNATE_CURRENT
Points clés : per-player-mob-spawns stabilise les spawns, merge-radius réduit le coût des items/XP, hopper‑* limite le débit, despawn‑ranges contrôle la densité d’entités, optimize‑explosions et alternate redstone réduisent la charge.
7) Monde & chunks : pré‑génération, distances, spawn
- Pré‑générez vos mondes (Overworld, Nether, End) pour éviter la génération sous charge.
/chunky world world /chunky center 0 0 /chunky radius 5000 /chunky start - Distances : démarrez à simulation-distance: 6–8, view-distance: 8, réduisez si nécessaire.
- Spawn : évitez keep‑spawn‑loaded si vous n’avez pas d’activité permanente au spawn ; limitez les chunk loaders.
8) Entités, hoppers, redstone : gros impacts
- Entités : limitez l’IA quand elles sont éloignées (activation-range), utilisez despawn‑ranges adaptés, évitez les fermes démesurées.
- Hoppers : gros consommateurs. Réduisez hopper-transfer/hopper-check, évitez les horloges de hoppers, préférez des trémies “passives”.
- Redstone : préférez Alternate Current (Paper), limitez les clocks très rapides, centralisez la logique au besoin.
9) Plugins : profiler, trier, remplacer
- Profiling d’abord : Spark/timings pour identifier les hotspots.
- À surveiller : pathfinding agressif, anti‑cheat très stricts, chunk loaders, outils réclamant des scans lourds.
- Remplacements : évitez les doublons (plusieurs économies/chat), préférez des plugins maintenus et réputés.
- Base de données : si MySQL/PG, utilisez un pool (HikariCP), local si possible (réseau local/Unix socket) ; évitez les requêtes sur le thread principal.
10) Réseau & proxy
- Proxy : pour un réseau multi‑serveurs, préférez Velocity (moderne) à BungeeCord ; activez le modern forwarding.
- Compression : évitez une compression trop forte (CPU) ; testez un seuil
compression-thresholdraisonnable (ex. 256/512). - Anti‑DDoS/latence : hébergeur avec mitigation solide, datacenter proche de vos joueurs, bons peers.
11) Hébergement : CPU, RAM DDR5, anti‑DDoS
- CPU : haute fréquence/single‑core (ex. 5800X3D, 7800X3D, 7950X3D ; 13600K/13900K/14900K).
- RAM : DDR5 5200–6000 MHz (ECC si possible). Pour 50+ joueurs/50 plugins, visez ~16 Go dédiés à la JVM (en laissant 2–4 Go à l’OS).
- Stockage : NVMe, pas de HDD ; surveillez l’endurance si backups fréquents.
- Réseau : anti‑DDoS, faible latence vers votre cible (FR/UE), peering de qualité.
12) Checklist rapide (ordre conseillé)
- Passer sur Paper (Java 17/21), config basique saine.
- Mesurer : /tps, /mspt, /timings, Spark.
- Ajuster distances (simulation 6–8, view 8), per-player-mob-spawns.
- Configurer merge-radius, despawn-ranges, hopper-*, alternate redstone.
- Pré‑générer les mondes avec Chunky.
- RAM : Xms=Xmx (8–16 Go selon charge), G1GC par défaut ; re‑mesurer.
- Plugins : profiler → retirer/remplacer les plus lourds.
- IO : NVMe, backups hors‑pics,
/save-offlors d’opérations coûteuses. - Matériel/hébergeur : CPU single‑core fort, DDR5 rapide, anti‑DDoS.
- Documenter chaque changement et conserver une configuration versionnée.
Conclusion : la performance d’un serveur Minecraft est un équilibre entre réglages (Paper/Spigot/Bukkit), ressources (CPU/RAM/NVMe), architecture (pré‑génération, proxy), et hygiène (profiling, backups, mises à jour). En suivant cette méthode itérative et mesurée, vous pouvez stabiliser les TPS à 20 même sous forte charge.