Minecraft15 janvier 2026 1 vue

Optimisation serveur Minecraft : Guide Spigot, Paper, Purpur (1.20-1.21)

Optimisation serveur Minecraft : Guide Spigot, Paper, Purpur (1.20-1.21)

Optimisation serveur Minecraft
Guide complet Spigot, Paper et Purpur (1.20-1.21)

Les performances d'un serveur Minecraft reposent sur une configuration logicielle et matérielle adaptée. Ce guide s'adresse aux administrateurs utilisant Spigot, Paper ou des forks similaires comme Purpur et Pufferfish, et couvre les versions 1.20.x à 1.21.x. Nous détaillerons les réglages essentiels des fichiers de configuration (spigot.yml, paper.yml, bukkit.yml, purpur.yml), expliquerons pourquoi les valeurs par défaut sont souvent inadaptées, et montrerons comment des ajustements ciblés améliorent le TPS, réduisent la charge CPU et stabilisent votre serveur.

Ce guide inclut également des recommandations de plugins utiles, une comparaison des avantages de Purpur et Pufferfish face à Paper et Spigot, ainsi que des conseils sur la configuration Java (versions, flags JVM G1GC). Le contenu est organisé par sections pour une consultation rapide et efficace.


Choisir son logiciel serveur

Comparatif des solutions disponibles

Logiciel Base Avantage principal Recommandé pour
Spigot CraftBukkit Compatibilité plugins historique Petits serveurs simples
Paper Spigot Optimisations + options avancées Majorité des serveurs
Pufferfish Paper Performance maximale Serveurs très peuplés
Purpur Pufferfish Personnalisation poussée Serveurs nécessitant des options exotiques

Paper plutôt que Spigot

Spigot et son prédécesseur CraftBukkit constituent la base historique des serveurs Bukkit, mais ils accusent aujourd'hui un retard en termes de performance face à Paper. Ce dernier est un fork de Spigot intégrant de nombreuses optimisations et correctifs tout en conservant une compatibilité totale avec les plugins Spigot et Bukkit. Paper expose également des dizaines d'options de configuration avancées permettant d'affiner les performances sans altérer significativement le gameplay.

Pufferfish pour la performance pure

Pufferfish est un fork de Paper apparu en 2021, entièrement orienté vers la performance. Il intègre de nombreux patchs avancés tout en restant compatible avec l'API Paper.

Améliorations incluses dans Pufferfish :

Fonctionnalité Description
Traitement asynchrone Certaines entités sont traitées partiellement en arrière-plan
Système DAB Algorithmes d'IA de mob plus rapides
Rendu des cartes SIMD Optimisation via instructions vectorielles
Gestion des hoppers Fonctionnement plus efficient des entonnoirs
Optimisation ray tracing Calculs de lignes de vue accélérés
Gestion mémoire Réduction des pauses du garbage collector
Intégration Sentry.io Remontée automatique des erreurs serveur
Profiler Flare Analyses avancées incluant le profilage mémoire

La plupart de ces optimisations sont transparentes pour le gameplay. Celles susceptibles d'avoir un impact peuvent être désactivées dans pufferfish.yml. Si votre objectif est de supporter un grand nombre de joueurs avec une charge élevée, Pufferfish représente souvent le meilleur choix.

Note : Il existe également Pufferfish+, une version commerciale encore plus optimisée avec suivi d'entités et pathfinding entièrement asynchrones, destinée aux très gros serveurs.

Purpur pour la personnalisation

Purpur est un fork de Paper orienté vers la personnalisation poussée. Techniquement, il inclut toutes les optimisations de Pufferfish mais n'ajoute pas de gain de performance supplémentaire propre. En revanche, il offre des centaines de nouvelles options de configuration pour ajuster les mécanismes de jeu : possibilité de monter certains mobs, calamars volants, sommeil d'un seul joueur, et bien d'autres.

Par défaut, ces fonctionnalités supplémentaires sont désactivées et le serveur se comporte comme un Paper/Pufferfish standard. N'utilisez Purpur que si vous avez réellement besoin de ces options de gameplay, car davantage de patchs signifie potentiellement davantage de bugs.

Ce qu'il faut éviter

À éviter Raison
JAR "maison" obscurs ou payants 99% de chances d'inefficacité voire de nuisance
Serveur Vanilla pur Écart de performance notable avec Paper
Rester sur Spigot Vous perdez les optimisations Paper gratuitement disponibles

Configuration bukkit.yml

Le fichier bukkit.yml gère notamment les paramètres de spawn des entités passives et hostiles. Les valeurs par défaut de Bukkit/Spigot sont calibrées pour de petits serveurs peu peuplés mais s'avèrent excessives pour un serveur survie avec de nombreux joueurs.

Limites de spawn (spawn-limits)

Ces quotas définissent le nombre de mobs pouvant spawner par joueur. Par défaut, un joueur peut avoir jusqu'à environ 70 monstres, 10 animaux et 15 créatures aquatiques autour de lui, ce qui peut rapidement saturer le serveur en entités avec plusieurs joueurs connectés.

Valeurs recommandées :

Catégorie Valeur par défaut Valeur recommandée
Monstres 70 20 à 30
Animaux 10 5
Créatures aquatiques 15 2
Créatures ambiantes 15 1

Le calcul interne multiplie ces limites par le nombre de joueurs connectés. En réduisant ces chiffres, vous diminuez la densité de mobs à gérer et allégez la charge serveur.

Attention : Des valeurs trop basses réduisent la faune et la difficulté du jeu. Pour un serveur survie "hardcore" ou axé sur les fermes à mobs, ne descendez pas trop bas. La valeur de 30 monstres offre un bon compromis si vous souhaitez conserver de l'action.

Fréquences de spawn (ticks-per)

Ces réglages contrôlent la fréquence des tentatives de spawn de nouvelles entités. Par défaut, Minecraft essaye de faire spawn des monstres à chaque tick (20 fois par seconde) et des animaux toutes les 400 ticks (environ 20 secondes).

Valeurs recommandées :

Catégorie Valeur par défaut Valeur recommandée
monster-spawns 1 2 à 10
animal-spawns 400 400
water-spawns 1 400
ambient-spawns 1 400

Mettre monster-spawns à 2 signifie n'essayer qu'une fois toutes les 2 ticks. La différence de taux d'apparition est imperceptible pour les joueurs, mais le serveur traite deux fois moins de cycles de spawn. Pour les catégories aquatiques et ambiantes, des intervalles de 400 ticks ou plus sont parfaitement acceptables puisque ces créatures atteignent rapidement leur plafond de population.

Option complémentaire Paper

Paper offre l'option per-player-mob-spawns qui répartit mieux les spawns entre joueurs plutôt que de remplir le quota d'un seul joueur avant de passer au suivant. En activant cette option, vous pouvez vous permettre des limites plus basses sans priver les joueurs de rencontres : chaque joueur aura sa part équitable de mobs autour de lui.


Configuration spigot.yml

Le fichier spigot.yml contient plusieurs paramètres clés pour contrôler la portée d'activité des entités et la gestion des objets au sol. Les valeurs par défaut cherchent à reproduire le comportement solo, mais en multijoueur elles peuvent être réduites pour économiser des ressources.

Distances de vue et simulation

Paramètre Description Recommandation
view-distance Distance de rendu des chunks Laisser sur "default" dans spigot.yml
simulation-distance Distance d'activité des entités 4 chunks (server.properties ou Paper)
view-distance (effective) Chunks envoyés au client 7 à 10 chunks

Depuis Minecraft 1.18+, il est recommandé de laisser view-distance sur "default" dans spigot.yml et d'utiliser les paramètres de distance dans server.properties ou via Paper. L'astuce consiste à définir une distance de simulation basse (4 chunks) tout en conservant une distance de vue plus élevée (8 à 10 chunks). Ainsi, les joueurs voient loin mais le serveur ne calcule que les environs proches.

Rayon de spawn des mobs (mob-spawn-range)

Ce rayon en chunks détermine à quelle distance du joueur les mobs peuvent apparaître. Par défaut fixé à 8 chunks (128 blocs), il peut être réduit pour concentrer les spawns.

Recommandation : Réglez ce paramètre à 4 ou 6 chunks si votre distance de simulation est faible. Veillez à ce que mob-spawn-range reste inférieur ou égal à votre distance de simulation effective. En réduisant ce rayon, même avec des spawn-limits réduits, les joueurs auront l'impression d'un monde vivant puisque les mobs apparaîtront plus près d'eux.

Portée d'activation des entités (entity-activation-range)

C'est l'un des leviers majeurs de performance. Il définit la distance en blocs à partir de laquelle les entités arrêtent d'être actives (leur IA est "endormie" tant qu'aucun joueur n'est proche).

Valeurs recommandées :

Catégorie Valeur par défaut Valeur recommandée
Monstres 32 24
Animaux 32 16
Créatures aquatiques 32 8
Villageois 32 16
Monstres volants (phantoms) 32 48
Raiders 32 48
Misc 16 8

Réduire ces rayons soulage le CPU car les entités lointaines ne consomment plus de ressources. Cependant, des valeurs trop basses peuvent casser certains mécanismes. Par exemple, les fermes à fer nécessitent des villageois "actifs" dans un certain rayon des zombies.

Conseil : Activez également tick-inactive-villagers: false pour que les villageois s'endorment hors du champ du joueur. Depuis la 1.14, les villageois ont un impact énorme sur les ticks lorsqu'ils sont actifs en masse.

Portée de tracking des entités (entity-tracking-range)

Ce paramètre définit à quelle distance les entités sont envoyées au client. Il peut être plus grand que l'activation range sans coût serveur significatif car cela n'affecte que l'envoi des données aux joueurs.

Recommandation : Gardez les tracking ranges un peu supérieurs aux activation ranges pour éviter l'effet de mobs qui "pop" soudainement à l'écran. Des valeurs de 48 pour la plupart des catégories (sauf misc à 32) constituent un bon compromis.

Fusion des items et XP (merge-radius)

Type Valeur par défaut Valeur recommandée
Items 2.5 4 à 5
XP 3.0 6

Fusionner les entités d'items au sol réduit considérablement le nombre d'entités à gérer. Au lieu de 50 boules d'XP séparées, vous n'en avez plus qu'une ou deux plus grosses. N'augmentez pas trop ces rayons car des items pourraient "téléporter" d'un bloc à l'autre ou traverser les murs pour se rejoindre.

Astuce : Paper propose l'option fix-items-merging-through-walls pour empêcher ce comportement si vous agrandissez beaucoup le rayon de merge.

Durée de vie des entités au sol

Paramètre Valeur par défaut Valeur recommandée
arrow-despawn-rate 1200 ticks (1 min) 300 ticks (15 sec)
item-despawn-rate 6000 ticks (5 min) 4000 ticks (3 min)

Les flèches tirées seront nettoyées plus rapidement, évitant leur accumulation invisible. Pour les items, 3 minutes suffisent largement pour qu'un joueur ramasse ses drops.

Note Paper : L'option alt-item-despawn-rate permet de définir un temps de despawn spécifique pour certains items (cobble, netherrack, gravier). Cela peut remplacer avantageusement un plugin de clearlag.

Autres paramètres importants

Paramètre Valeur recommandée Description
nerf-spawner-mobs true Les mobs de spawners n'ont plus d'IA jusqu'à être touchés
save-user-cache-on-stop-only true Le cache utilisateurs n'est sauvé qu'à l'arrêt
max-tick-time (tile et entity) 1000 Désactive quasi totalement le limiteur de tick

nerf-spawner-mobs : Si votre serveur possède beaucoup de fermes à spawner, c'est un énorme gain de performance. Les monstres "nerfés" n'ont quasiment aucun coût CPU et attendent simplement d'être tués.

max-tick-time : En mettant 1000ms, vous désactivez le système de garde-fou qui peut causer des comportements bizarres (entités ou machines redstone qui ratent des cycles). Le serveur essaiera toujours de tout calculer comme prévu, même si cela le mène à un TPS inférieur à 20.


Configuration paper.yml

Paper et ses forks disposent de configurations supplémentaires par rapport à Spigot. Ces options sont souvent des améliorations désactivées par défaut pour conserver le comportement vanilla, mais une fois activées elles boostent nettement les performances.

Optimisations du moteur de jeu

Redstone optimisée

Option Valeur Description
use-faster-eigencraft-redstone true Active l'algorithme EigenCraft
redstone-implementation ALTERNATE_CURRENT Alternative selon la version

Ce nouveau moteur réduit les mises à jour redstone redondantes et améliore grandement les performances des circuits complexes sans changer leur fonctionnement observable.

Explosions optimisées

Option Valeur Description
optimize-explosions true Algorithme optimisé pour TNT et creepers

L'algorithme calcule les zones d'effet plus rapidement avec une perte de précision imperceptible pour les joueurs.

Anti-Xray intégré

Option Valeur Description
anti-xray.enabled true Active la protection
anti-xray.engine-mode 2 Mode d'obfuscation recommandé

L'anti-xray de Paper est bien plus performant que les plugins traditionnels. Il obfusque les blocs de minerais non découverts en remplaçant temporairement leur apparence dans les chunks envoyés. N'utilisez jamais de plugin anti-xray tiers sur Paper.

Gestion des entités et mobs

Collisions réduites

Option Valeur par défaut Valeur recommandée
max-entity-collisions 8 2

Dans un gros tas de mobs, chaque entité ne s'occupera que de 2 collisions à la fois au lieu de 8, réduisant l'explosion combinatoire de calculs.

Spawns par joueur

Option Valeur recommandée
per-player-mob-spawns true

Le serveur répartit le mobcap global équitablement entre les joueurs, évitant qu'un joueur isolé monopolise tous les spawns hostiles.

Optimisation des hoppers

Les entonnoirs sont réputés pour être l'un des pires ennemis du TPS car ils effectuent des vérifications constantes.

Option Valeur Condition
hopper.disable-move-event true Uniquement si aucun plugin n'écoute InventoryMoveItemEvent
hopper-transfer (spigot.yml) 8 Valeur par défaut acceptable
hopper-check (spigot.yml) 8 Au lieu de 1 par défaut
hopper.ignore-occluding-blocks true Désactive un comportement vanilla peu utilisé

En désactivant disable-move-event, vous évitez que le serveur ne crée un événement à chaque mouvement d'item dans un hopper. C'est un gain massif de performance sur les serveurs remplis de circuits de tri.

Attention : Si vous utilisez des plugins de protection de coffres ou de log des items déplacés, ne désactivez pas cette option.

Optimisations des villageois

Option Valeur Description
tick-inactive-villagers false Les villageois s'endorment hors du champ du joueur
villager.lobotomize (Purpur) true Retire l'IA des villageois trop éloignés de leur objectif
villager.search-radius.* (Purpur) 16 Réduit les rayons de recherche de lit/travail

Options diverses Purpur

Option Valeur Description
zombie.aggressive-towards-villager-when-lagging false Les zombies arrêtent de poursuivre les villageois en cas de lag
entities-can-use-portals false Empêche les mobs de traverser les portails
use-alternate-keepalive true Évite les timeouts de joueurs lents

Chargement des chunks et monde

Protection contre les chunks non chargés

Option Valeur recommandée
prevent-moving-into-unloaded-chunks true

Cette option empêche qu'un joueur trop rapide (en elytra par exemple) entre dans un chunk non encore généré, ce qui provoquerait un chargement synchrone très coûteux pouvant geler le serveur.

Délai de déchargement

Option Valeur recommandée
delay-chunk-unloads-by 10s

Si un joueur fait un aller-retour rapide, le serveur ne va pas sans cesse charger/décharger les mêmes chunks. Cela évite des opérations IO/CPU répétées.

Cartes au trésor

Option Valeur Description
treasure-maps.enabled false Désactive complètement les maps au trésor
treasure-maps.find-already-discovered true Les cartes pointent vers des structures déjà découvertes

Les cartes au trésor peuvent causer des spikes de lag énormes si elles cherchent des structures très loin. Si vous les conservez, assurez-vous d'avoir une worldborder et idéalement d'avoir prégénéré l'intérieur.

Prégénération du monde

Depuis les versions 1.18+, Mojang a optimisé la génération de terrain et la charge asynchrone. La prégénération n'est plus indispensable sauf sur des CPU très lents. Néanmoins, pour un lancement de serveur, vous pouvez utiliser un plugin comme Chunky pour prégénérer l'intérieur de votre worldborder.

Conseil : Placez une worldborder sur chacun de vos mondes (Monde, Nether, End) pour éviter que des joueurs ne partent à l'infini générer du terrain inutilement. La border du Nether doit être 8 fois plus petite proportionnellement.


Plugins de performance recommandés

Tableau récapitulatif

Plugin Fonction Indispensable
Spark Profiler CPU et mémoire ✅ Oui
Timings (intégré) Rapport des tâches lourdes ✅ Oui
FarmLimiter/FarmControl Limite les regroupements d'entités Selon besoin
Chunky Prégénération de monde Selon besoin
VillagerOptimizer Réduit la fréquence des tâches villageois Selon besoin
ClearLag Nettoyage périodique des entités ⚠️ Pansement

Spark

Indispensable pour profiler son serveur. Spark permet d'enregistrer des profils de performance CPU et mémoire en temps réel.

Commandes utiles :

Commande Fonction
/spark profiler Démarre l'enregistrement
/spark profiler --stop Arrête et génère le rapport
/spark tps Affiche le TPS actuel
/spark health État de santé du serveur
/spark gc Informations sur le garbage collector
/spark profiler --memory Traque les fuites mémoire

C'est l'outil parfait pour identifier la cause de vos lag spikes : découvrir qu'un certain type de mob ou qu'une fonction d'un plugin monopolise 40% du temps de tick.

Timings (intégré Paper/Spigot)

La commande /timings report génère un rapport des tâches les plus lourdes depuis le dernier reset. Paper améliore grandement cet outil par rapport à Spigot, fournissant des graphiques de charge et le détail des événements les plus coûteux.

FarmLimiter / FarmControl

Ce type de plugin surveille et limite la taille des regroupements d'entités dans les fermes AFK. Un problème courant : les joueurs créent d'énormes fermes à mobs ou 500 vaches dans un enclos minuscule.

Fonctionnement : Au-delà d'un seuil (par exemple 30 mobs du même type dans un rayon donné), les nouveaux spawns sont bloqués ou les mobs en trop sont supprimés progressivement.

ClearLag

Plugin connu qui nettoie périodiquement les entités au sol et les mobs en trop.

Avis : ClearLag peut résoudre ponctuellement une surcharge, mais c'est plus un pansement qu'une solution pérenne. Bien configurer les despawn et merges d'items rend souvent ClearLag superflu. De plus, ClearLag lui-même consomme des ressources pour scanner l'ensemble des entités régulièrement.

Chunky

Plugin de prégénération de monde simple et performant. Vous définissez un rayon ou des bordures et il remplit progressivement tous les chunks. Il fonctionne de manière asynchrone pour ne pas effondrer votre serveur pendant l'opération.

VillagerOptimizer

Si vos villageois restent un problème malgré les réglages, ce plugin réduit la fréquence de leurs tâches coûteuses (recherche de lit, pathfinding). C'est similaire aux réglages Purpur mais utilisable sur Spigot/Paper.

Ce qu'il faut éviter

À éviter Raison
Plugins "miracles" promettant du multithreading 99% inefficaces ou dangereux
Commande /reload en production Provoque fuites mémoire et crashs
Charger/décharger des plugins à chaud Incohérences et instabilité

Préférez toujours un redémarrage propre du serveur après avoir ajouté ou retiré des plugins.


Configuration Java et JVM

Optimiser Minecraft ne s'arrête pas aux configs du jeu : l'environnement d'exécution Java et les ressources allouées importent également.

Version de Java requise

Version Minecraft Version Java minimale
1.17 et antérieures Java 8 ou 11
1.18 à 1.20.4 Java 17
1.20.5 et supérieures Java 21

Évitez Java 8 ou 11 sur les serveurs modernes. Les améliorations du langage et du garbage collector dans Java 17/21 apportent des gains de performance et de stabilité non négligeables.

Configuration du Garbage Collector

Minecraft serveur utilise intensivement la mémoire, générant beaucoup d'objets temporaires. Un mauvais réglage du GC peut provoquer des pauses de plusieurs centaines de millisecondes.

Principes recommandés :

Principe Recommandation
RAM suffisante 8 Go pour un serveur classique de 50 joueurs
Xms = Xmx Définir la même valeur pour heap min et max
Garbage Collector G1GC (défaut sur Java 17+)
Générateur de flags Utiliser flags.sh pour obtenir les flags optimaux

Exemple de ligne de commande :

java -Xms8G -Xmx8G -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+ParallelRefProcEnabled -XX:+AlwaysPreTouch -jar server.jar nogui

Conseil : Utilisez le générateur de flags sur flags.sh qui fournit automatiquement la ligne de commande adéquate en fonction de votre version de Java et de la RAM à allouer.

Surveillance du GC

La commande /spark gc ou certains timings peuvent vous indiquer le pourcentage de temps passé en GC. Idéalement, cela doit rester faible (inférieur à 5%). Si vous constatez des pauses fréquentes, augmentez la RAM ou diagnostiquez une éventuelle fuite mémoire.

JVM alternatives

JVM Recommandation
OpenJ9 ⚠️ Non supportée officiellement
GraalVM ⚠️ Non supportée officiellement
HotSpot (standard) ✅ Recommandée

Bien que des JVM alternatives existent, Paper et Spigot ne les supportent pas officiellement et elles peuvent causer des problèmes imprévisibles.

Conseils système

Composant Recommandation
CPU Privilégier la fréquence au nombre de cœurs
Stockage SSD/NVMe pour le monde
network-compression-threshold 256 (défaut) ou 512 pour serveurs 100+ joueurs

Minecraft est essentiellement monothread. La fréquence et l'IPC du processeur priment donc sur le nombre de cœurs.


Conclusion et recommandations

En appliquant les recommandations de ce guide, vous obtiendrez un serveur nettement plus stable et performant, capable de maintenir 20 TPS dans des situations où la configuration par défaut aurait vacillé.

Récapitulatif des points clés

Domaine Action prioritaire
Logiciel serveur Passer à Paper ou un fork optimisé
Distances Réduire simulation-distance et activation ranges
Spawns Diminuer les limites et augmenter les intervalles
Entités Activer nerf-spawner-mobs et tick-inactive-villagers: false
Redstone Activer l'algorithme alternatif Paper
Hoppers Augmenter hopper-check et désactiver move-event si possible
Monitoring Utiliser Spark régulièrement
Java Utiliser Java 17/21 avec flags G1GC optimisés

Bonnes pratiques continues

Surveillez constamment : Servez-vous de Spark pour identifier les sources de lag. L'optimisation est un processus continu car chaque nouvelle ferme ou plugin ajouté peut introduire un point faible.

Imposez des limites : Ne laissez pas les joueurs faire n'importe quoi au détriment du serveur. Annoncez clairement vos règles d'entités et utilisez des outils pour les faire respecter automatiquement.

Acceptez les compromis : Un serveur 100% vanilla au niveau comportement et 100% fluide n'existe pas pour une charge élevée. Vaut-il mieux des villagers un peu moins "intelligents" ou un spawn de 200 villageois qui paralyse tout ? La question est vite répondue.

Mettez à jour intelligemment : Tenez vos logiciels (Paper, Purpur) à jour car ils intègrent souvent de nouvelles optimisations. Lisez les changelogs et restez informé des évolutions comme Folia, le futur serveur multi-threadé de Paper.

Chaque serveur est unique. Ce guide vous fournit une base solide à peaufiner : testez progressivement les changements (idéalement un par un), mesurez l'impact via Spark ou timings, et ajustez selon vos observations.


Pour tester ces optimisations sur une infrastructure performante, découvrez nos offres de serveurs Minecraft gratuits et constatez la différence en conditions réelles !