30% de réduction pendant les 3 premiers mois !Voir les offres GameBoxJusqu'au 03/11
Transcription de la vidéo

Votre serveur Minecraft lag. Trouvez de quel lag il s'agit, mesurez avec spark, puis réglez ce qui pèse vraiment. Trois lags se confondent : les F P S, votre ordinateur, le ping, le réseau, et le T P S, le serveur, le seul qui se corrige dans sa configuration. Le jeu vise vingt ticks par seconde : un tick toutes les cinquante millisecondes. Le temps de calcul d'un tick, le M S P T, doit rester sous cinquante : à quarante-cinq, presque plus de marge. Étape un : mesurer, avant de régler. Dans la console, tapez t p s, puis m s p t. Ce pic à soixante-sept millisecondes est isolé, pas un lag installé. Paper embarque spark : rien à installer. La commande spark t p s ajoute le quatre-vingt-quinzième centile, qui trahit un serveur qui décroche souvent. Attention : spark health téléverse son rapport en ligne, sans rien demander. Pour rester en local : spark health show. Étape deux : les distances. Arrêtez le serveur avec stop, jamais avec contrôle C, puis copiez server point properties. Premier réglage : simulation distance, de dix à huit. Redémarrez, comparez le M S P T, puis seulement, touchez à view distance. Pour view distance, la zone est un disque : de dix à huit, environ un tiers de chunks en moins envoyés à chaque joueur. Prévenez les joueurs : hors du rayon, mobs et cultures sont figés. Étape trois : Paper, Spigot et Bukkit. Les valeurs par défaut sont déjà bonnes : changez un seul réglage à la fois, puis mesurez. Dans spigot point Y M L, au-delà du rayon entity activation range, les entités s'activent moins souvent. Prudence sous seize à vingt-quatre blocs. Dans paper world defaults, Alternate Current réduit le travail de la redstone : testez sur une copie du monde. Disable move event accélère beaucoup les entonnoirs, mais les plugins de protection de coffres en dépendent. Étape quatre : pré-générer le monde avec Chunky. Explorer génère des chunks à la volée, et le tick en souffre : Chunky les génère à l'avance. Chunky start génère un carré de rayon mille. Puis une bordure de deux mille, son diamètre, dans chaque dimension. Faites chunky pause avant d'arrêter. Et chunky trim est irréversible : sauvegardez avant. Étape cinq : trouver ce qui consomme. Causes classiques : les mobs, la redstone, et les entonnoirs, à couvrir d'un bloc solide ou, mieux, d'un composteur. Si le M S P T reste élevé, le profiler de spark montre en dix minutes où part le temps. Son rapport est téléversé, lui aussi. En local : démarrez sans timeout, puis arrêtez avec save to file. Étape six : les options de Java. Paper recommande les options d'Aikar. Même valeur pour X M S et X M X : votre RAM moins un giga et demi, six mille cinq cents mégas pour huit gigas. Ne donnez jamais toute la mémoire : le système peut tuer le serveur. Étape sept : quand c'est le matériel. Plus de RAM ne règle pas un serveur lent : le tick repose sur un seul thread. Un thread à cent pour cent, les autres au repos : c'est le processeur. Les serveurs de jeux J S B Cloud tournent sur des Ryzen sept, neuf mille sept cents X, à cinq gigahertz, avec des sauvegardes depuis le panel. L'article complet, avec toutes les sources, est sur jsbcloud point com, rubrique blog.

Un serveur Minecraft qui lag a rarement une seule cause, et la première chose à faire est de savoir de quel lag on parle : l'image qui saccade chez vous (FPS), le délai du réseau (ping) ou un serveur qui n'arrive plus à suivre (TPS). Ce guide s'adresse à qui gère un serveur Minecraft Java sous Paper (un logiciel de serveur optimisé, qui embarque spark) : mesurer, régler ce qui pèse, reconnaître le moment où seul le matériel aide.

En bref

  • Trois lags différents se confondent : les FPS (votre ordinateur), le ping (le réseau) et le TPS (le serveur). Seul le TPS se corrige dans la configuration du serveur.
  • Le serveur vise 20 TPS, soit 50 ms par tick. L'affichage plafonne à 20 : un astérisque (*20.0) signale une mesure à peine supérieure, ramenée à 20.
  • Mesurez avant de régler : Paper embarque spark, qui indique où part le temps de calcul. Attention : spark health envoie son rapport sur Internet, utilisez spark health show pour rester en local.
  • Les leviers principaux : les distances, la pré-génération du monde, les fermes et entités, puis les plugins.
  • Plus de RAM ne règle pas un serveur lent : le tick repose surtout sur un seul cœur de processeur, donc sur ses performances.

FPS, TPS, ping : trois lags qui n'ont rien à voir

Minecraft fonctionne par ticks : le jeu tourne normalement à 20 ticks par seconde, soit un tick toutes les 50 millisecondes. Le TPS (ticks per second) est le nombre de ticks réellement calculés chaque seconde. Le MSPT (milliseconds per tick) est le temps que le serveur met à calculer un tick. Le TPS ne reste à 20 que si le MSPT ne dépasse pas 50 : un serveur à 45 ms par tick affiche encore 20 TPS mais n'a presque plus de marge.

Ce que vous constatez Cause probable Comment le vérifier
Tout le monde voit les mobs et les blocs en retard, même les joueurs bien connectés Serveur surchargé (TPS bas ou MSPT proche de 50) /spark tps, puis un profil spark
Un seul joueur saccade ou se téléporte, le serveur est à 20 TPS Ping ou connexion de ce joueur /spark ping --player pseudo
L'image est hachée chez vous seul, les autres vont bien FPS : votre ordinateur ou vos réglages graphiques Le compteur d'images du jeu

La commande /spark ping affiche le temps d'aller-retour des joueurs (--player pour un seul, connecté). L'écran F3 n'affiche le MSPT que en solo ou en hébergeant la partie.

1. Mesurer : tps, mspt et spark

Avant toute modification, mesurez, dans la console du serveur (aucun droit requis) ou en jeu après op VotrePseudo tapé dans la console. Dans la console, les commandes se tapent sans /, en jeu avec. Les sorties ci-dessous ont été relevées le 09/10/2026 sur un serveur Paper 26.2 neuf, sans joueur connecté.

/tps et /mspt

tps
TPS from last 1m, 5m, 15m: 20.0, 20.0, 20.0
mspt
Server tick times (avg/min/max) from last 5s, 10s, 1m:
◴ 0.5/0.2/2.7, 0.5/0.2/2.7, 1.1/0.2/67.0

/tps donne le TPS moyen sur 1, 5 et 15 minutes ; /mspt donne la moyenne, le minimum et le maximum du temps par tick sur les 5, 10 et 60 dernières secondes. Le 67,0 ms de la dernière colonne est un pic isolé, vraisemblablement dû au démarrage ou au chargement initial : un maximum isolé n'est pas un lag installé, regardez plutôt la moyenne et le 95e centile (voir spark tps).

spark, déjà inclus dans Paper

Depuis la version 1.21, Paper embarque le profiler spark : il n'y a rien à installer. Les commandes /spark de ce guide existent donc sur Paper 1.21 et ultérieur (dont la série 26.x) ; avant, installez le plugin spark. Vérifiez votre version avec version. Les guides qui demandent de lancer /timings report sont périmés : Timings est désactivé par défaut depuis la 1.21.

spark tps
[⚡] TPS from last 5s, 10s, 1m, 5m, 15m:
[⚡]  *20.0, 20.0, *20.0, *20.0, *20.0
[⚡] Tick durations (min/med/95%ile/max ms) from last 10s, 1m:
[⚡]  0.2/0.4/0.8/9.8;  0.2/0.6/1.8/66.9
[⚡] CPU usage from last 10s, 1m, 15m:
[⚡]  12%, 18%, 18%  (system)
[⚡]  0%, 0%, 0%  (process)

spark tps ajoute à /tps les durées de tick (minimum, médiane, 95e centile, maximum) et l'usage du processeur. Le 95e centile est la valeur que 95 % des ticks ne dépassent pas : il trahit un serveur qui décroche souvent. L'astérisque de *20.0 signale un TPS mesuré à peine au-dessus de 20, que l'affichage ramène à 20 : tout va bien.

Attention : spark health envoie le rapport sur Internet

La commande spark health produit un rapport complet (TPS, processeur, mémoire, disque). Dans la console de Paper 26.2, la taper seule ouvre un tableau de bord en direct, hébergé sur spark.lucko.me : elle téléverse les données sur le service en ligne de spark et affiche simplement un lien, sans rien demander. L'aide liste les sous-commandes dashboard, upload (la variante statique) et show. Le rapport reste chez un tiers : ne la lancez pas si vous ne voulez pas partager ces mesures.

La variante locale, qui affiche le texte dans la console, est spark health show (extrait) :

spark health show
[⚡] Generating server health report...
> TPS from last 5s, 10s, 1m, 5m, 15m:
    *20.0, 20.0, *20.0, *20.0, *20.0

> Tick durations (min/med/95%ile/max ms) from last 10s, 1m:
    0.2/0.3/0.6/10.1; 0.2/0.6/1.4/16.3

> CPU usage from last 10s, 1m, 15m:
    8%, 8%, 8%  (system)
    0%, 0%, 0%  (process)

> Memory usage:
    748.5 MB / 2.0 GB   (36%)

La sortie complète affiche aussi le disque. --memory détaille la mémoire de la JVM (la machine virtuelle Java, qui fait tourner le serveur : tas et zones du ramasse-miettes G1) et --network l'usage réseau du système.

2. Régler server.properties : les distances

Pour modifier server.properties (à la racine), tapez stop dans la console (ou utilisez le bouton Arrêter du panel) et attendez l'arrêt complet : c'est la bonne façon d'arrêter (pas de Ctrl+C ni de kill). La documentation de Paper avertit que modifier les fichiers pendant que le serveur tourne les corrompt. Copiez le fichier (cp server.properties server.properties.bak, ou la rubrique Sauvegardes du panel), modifiez-le, puis relancez : les changements ne s'appliquent qu'au démarrage. Ne collez pas les extraits ci-dessous : ils montrent les valeurs par défaut pour vous repérer.

Valeurs par défaut sur un serveur Paper 26.2 neuf :

view-distance=10
simulation-distance=10
  • view-distance (10 par défaut, de 3 à 32) : la quantité de monde envoyée au client, en chunks autour du joueur. Un chunk est une colonne de 16 sur 16 blocs. C'est un rayon : la zone est un disque, non un carré, dont la surface croît avec le carré du rayon. Passer de 10 à 8 envoie donc environ un tiers de chunks en moins à chaque joueur.
  • simulation-distance (10 par défaut, de 3 à 32) : le rayon, en chunks, dans lequel les entités sont mises à jour par le serveur. Au-delà, elles ne sont plus mises à jour. Plus ce rayon est grand, plus il y a de mobs et de blocs à mettre à jour à chaque tick : c'est le premier réglage à essayer, à confirmer avec spark.

Notez d'abord le MSPT (spark tps) avec des joueurs connectés. Passez simulation-distance de 10 à 8, redémarrez et comparez ; ensuite seulement, touchez à view-distance. Prévenez les joueurs : hors du rayon, mobs et cultures sont figés, ce qui peut perturber les fermes (le spawn naturel exige de toute façon un joueur à moins de 8 chunks). spigot.yml accepte aussi ces deux distances par monde : default reprend la valeur de server.properties.

3. Régler Paper, Spigot et Bukkit sans copier une config toute faite

Paper range ses réglages dans config/paper-global.yml et config/paper-world-defaults.yml, en plus de spigot.yml et bukkit.yml à la racine. Les valeurs par défaut sont déjà bonnes : si une configuration copiée en ligne cause des comportements bizarres, la documentation conseille de revenir aux valeurs par défaut. Modifiez un réglage à la fois, puis mesurez avec spark tps. Arrêtez le serveur avant d'éditer (voir la section 2). Les extraits YAML ci-dessous montrent les valeurs par défaut : ne les collez pas. Cherchez la clé (Ctrl+F), changez seulement la valeur, avec des espaces et jamais de tabulations, puis vérifiez au démarrage qu'aucune erreur de configuration ne s'affiche.

spigot.yml : entités, entonnoirs et chien de garde

Valeurs par défaut, extrait (section world-settings.default) :

entity-activation-range:
  animals: 32
  monsters: 32
  misc: 16
  villagers: 32
ticks-per:
  hopper-check: 1
  • entity-activation-range : la distance en blocs autour d'un joueur à laquelle les entités s'activent normalement. Au-delà, elles s'activent moins souvent. Baisser animals, monsters et villagers allège un serveur peuplé de mobs, mais fige fermes et villageois hors du rayon : par prudence, testez avant de descendre villagers ou monsters sous 16 à 24 blocs, et ne touchez pas à misc (16 par défaut, objets au sol).
  • ticks-per.hopper-check (1) : le nombre de ticks entre deux tentatives d'un entonnoir pour aspirer des objets. En le montant, les vérifications s'espacent : c'est moins de charge, mais mécaniquement un ramassage plus lent. Mesurez le gain avec spark.
  • settings.timeout-time (60 par défaut, section settings de spigot.yml) : le délai au bout duquel le watchdog de Spigot, le chien de garde du serveur, juge le serveur bloqué et l'arrête de force. Ce n'est pas un réglage de performance : une valeur de 0 ou moins vaut 300 secondes : ce réglage ne permet donc pas de la désactiver. Sur Paper, le max-tick-time de server.properties n'a aucun effet : le watchdog de Vanilla y est neutralisé.

bukkit.yml : limites de mobs

Valeurs par défaut, extrait :

spawn-limits:
  monsters: 70
  animals: 10
  ambient: 15

Les limites d'apparition peuvent être redéfinies par monde dans la configuration de Paper (spawn-limits à -1 reprend la valeur de bukkit.yml) ; /paper mobcaps affiche les plafonds de mobs globaux d'un monde.

paper-world-defaults.yml : redstone, explosions, entonnoirs

misc:
  redstone-implementation: VANILLA
environment:
  optimize-explosions: false
hopper:
  disable-move-event: false

Sauvegardez le dossier du monde (world, world_nether, world_the_end) avant tout changement de comportement et testez un réglage à la fois. La référence de configuration des mondes décrit leurs effets :

  • redstone-implementation : VANILLA par défaut. ALTERNATE_CURRENT réduit le travail de la poussière de redstone. Le projet Alternate Current annonce une contribution de la poussière au MSPT jusqu'à 20 fois plus faible, avec un ordre de mises à jour différent de celui du jeu de base : testez vos circuits sur une copie du monde ; retour arrière en remettant VANILLA et en redémarrant.
  • optimize-explosions : met en cache les recherches d'entités pendant une explosion.
  • hopper.disable-move-event : à true, il améliore beaucoup les performances des entonnoirs mais désactive un événement dont dépendent les plugins de protection de coffres. Vérifiez d'abord qu'aucun plugin ne s'en sert.

4. Pré-générer le monde avec Chunky

Quand un joueur explore, le serveur génère des chunks à la volée, ce qui pèse sur le tick. Chunky est un plugin qui génère une zone à l'avance ; cet article explique comment installer un plugin.

Par défaut, la sélection de Chunky est un carré dans l'overworld (le monde principal), centré en 0,0, de rayon 500 blocs, soit 1000 sur 1000. Pour pré-générer un carré de rayon 1000 dans le monde « world » (indiquez toujours le nom du monde) :

chunky start world square 0 0 1000

Pendant la génération :

  • chunky pause met les tâches en pause en sauvegardant la progression, chunky continue les reprend.
  • chunky cancel arrête et supprime les tâches : elles ne peuvent plus être reprises.

Une pré-génération charge fortement le processeur et le disque : lancez-la quand peu de joueurs sont connectés, vérifiez l'espace libre (df -h) et faites chunky pause avant d'arrêter le serveur. Fixez ensuite une bordure à la taille pré-générée, sinon les joueurs sortent de la zone et le bénéfice disparaît. worldborder set prend un diamètre : 2000 pour un rayon de 1000. Depuis la 1.21.9, la commande ne vaut que pour la dimension où elle s'exécute (l'overworld depuis la console). Pour les deux autres :

execute in minecraft:the_nether run worldborder set 2000
execute in minecraft:the_end run worldborder set 2000

Pour pré-générer le Nether et l'End, relancez Chunky avec world_nether et world_the_end. Irréversible : sauvegardez avant chunky trim, qui supprime tous les chunks hors de la sélection (par défaut, un rayon de 500).

5. Fermes, redstone et entités : trouver ce qui consomme

Sur un serveur bien réglé, le lag vient souvent d'entités ou de mécanismes accumulés. Le wiki Minecraft en liste les causes classiques :

  • Les mobs : de grandes quantités de mobs, et surtout leur intelligence artificielle.
  • La redstone, surtout la poussière, qui provoque beaucoup de mises à jour de blocs et de lumière.
  • Les entonnoirs : ils cherchent en permanence des objets au-dessus d'eux. Les couvrir d'un bloc solide (sauf nid d'abeilles ou ruche) arrête cette vérification, et un composteur est encore meilleur pour les performances.

Pour repérer le coupable, lancez un profil (section suivante).

6. Plugins lourds : profiler avec spark

Si le MSPT reste élevé malgré les réglages, un plugin est parfois en cause. Le profiler de spark mesure où le serveur passe son temps. La commande donnée par la documentation de Paper est :

/spark profiler start --timeout 600

Au bout de 10 minutes, la commande renvoie l'adresse d'un rapport consultable dans un navigateur.

Ce rapport est envoyé sur le service en ligne de spark, comme celui de spark health, et reste hébergé chez un tiers : ne le diffusez pas sans avoir regardé ce qu'il montre de votre serveur. Pour le garder en local, démarrez le profiler sans --timeout, puis arrêtez-le avec /spark profiler stop --save-to-file : le profil est alors enregistré dans le dossier de configuration au lieu d'être téléversé.

Pour des pics de lag plutôt qu'un lag permanent, la moyenne cache les ticks lents : la documentation de Paper donne /spark profiler start --only-ticks-over 100 --timeout 300, qui n'enregistre que les ticks de plus de 100 ms (le rapport est aussi téléversé, avec la même variante locale). /spark tickmonitor signale les ticks anormalement longs, jusqu'à ce que vous retapiez la commande ; /spark gc affiche l'historique du ramasse-miettes.

7. Les options de lancement de Java

Des saccades peuvent venir du ramasse-miettes de Java, qui libère la mémoire. La documentation de Paper recommande les options publiées par Aikar. Elle donne cette commande, dont vous adaptez -Xms et -Xmx à votre mémoire. Ne la collez pas telle quelle : remplacez 10G par votre RAM moins 1,5 Go (par exemple 6500M pour 8 Go, l'unité collée au chiffre) et paper.jar par le vrai nom de votre fichier (ls *.jar). Vérifiez d'abord Java avec java -version : Paper 26.x exige Java 25 au minimum.

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:G1HeapWastePerc

À lire aussi