le forum de MineStrator

Nous ne cherchons pas à être un forum, mais le forum de référence pour les administrateurs et joueurs de serveurs minecraft, la communauté a besoin de toi, alors n'hésite pas à t'inscrire et à participer à la vie du forum !

[MineStrator] Mon serveur minecraft lag, pourquoi ?

Yoshun

Administrateur
Staff
Administrateur
Bonjour et bienvenue dans ce tutoriel qui va vous expliquer dans les grandes lignes quelles sont les principales sources de lag d'un serveur et comment les analyser et y remédier pour que votre serveur retrouve une bonne jouabilité. Et avant toute chose, je tiens à préciser que ce tutoriel n'est pas exhaustif, je ne parlerai que des sources les plus connues et évidentes.

En préambule, laissez moi vous expliquer le fonctionnement d'un serveur Minecraft et comprendre pourquoi on parle de "ticks" dans la suite du tutoriel :

Minecraft fonctionne sur un système de tick : 1 tick représente 0,05 seconde. Durant chaque tick, le jeu effectue tout un tas de calcul : tout ce qui touche à la map (gestion des tronçons (chargement, déchargement, création pendant l'exploration), gestion des blocs et des "liquides" comme l'eau et la lave, etc.), tout ce qui touche aux entités (apparition et disparition des entités passives et hostiles, déplacements des entités, interaction avec l'environnement, etc.), les interactions des joueurs sur la map, la gestion des plugins et des mods, etc.

Par exemple, à chaque tick, si vous avez un creeper sur le serveur, le jeu va calculer plusieurs choses : sa position sur la map, le bloc sur lequel il se situe (s'il est dans l'eau par exemple pour que le jeu le fasse "nager"), les entités autour de lui pour le faire bouger s'il y a un chat par exemple (les creepers ont peur des chats) ou un joueur pour l'attaquer. Et si c'est un joueur, sa distance pour vérifier s'il est assez proche pour le faire exploser. Et s'il est assez proche pour exploser, lancer le "délai avant l'explosion" ou le faire exploser s'il y a eu assez de délai, etc.
Maintenant, multipliez ces calculs par tout ce qui existe sur le jeu et vous avez normalement saisi tout ce qu'un serveur Minecraft doit faire à chaque tick pour fonctionner correctement. Et s'il le jeu ne parvient pas à calculer tout ce qu'il doit calculer pendant ce délai prévu de 1 tick (soit 0,05 seconde), c'est à ce moment là que vous ressentirez des lags en jeu.
Si vous voulez plus de détails sur les ticks, voici le lien du wiki :

Maintenant, il existe quelques sources connues de lags et surtout, quelques outils pour analyser un serveur qu'on va voir dès maintenant.

1 - Les principales sources de lag d'un serveur

1.1 - Quelques premières vérifications

Avant de commencer à parler des lags d'un serveur, il est bon de faire quelques vérifications de votre côté.
N'hésitez pas tout d'abord à vérifier la stabilité de votre connexion. Notez que la 4G, les VPN et autre wifi public peuvent provoquer des instabilités et vous pouvez ressentir ces fameux lags sans que cela ne concerne le serveur.
Dans un second temps, n'hésitez pas à vérifier s'il n'y a pas un incident en cours sur le réseau de votre opérateur ou sur le réseau de MineStrator (vérifiez vos tâches pour ça), c'est relativement rare mais ça peut arriver et ça reste une possibilité.
S'il n'y a pas de soucis au niveau de la connexion, alors le problème vient probablement du serveur.

Pour ça, il existe un moyen très simple de s'en assurer.
Il vous suffit d'aller voir la console ou les logs du serveur et de vérifier si vous avez la présence de ce message :
[Server thread/WARN]: Can't keep up! Is the server overloaded? Running 22840ms or 456 ticks behind
Cette ligne indique que votre serveur n'arrive pas à effectuer tout ce qu'il doit faire dans un laps de temps "standard" et qu'il y a effectivement des lags (les chiffres peuvent varier évidemment mais plus ils sont haut, plus votre serveur aura des gros lags au point de devenir injouable).
Si vous avez ce message qui apparait en permanence alors votre serveur lag et il est temps de vous présenter les principales sources de lag.

1.2 - Les principales sources de lag

Cette liste n'est pas exhaustive mais elle vous donnera déjà les plus évidentes :

- La génération des maps qui est certainement le processus le plus gourmand en terme de ressources pour votre serveur Minecraft. Quand un joueur explore, celui-ci charge des nouveaux chunks (donc création du fichier contenant les informations des chunks, ajout des possibles structures, intégration des possibles mods, etc ...). Et plus vous avez de joueurs qui explorent, plus le serveur utilisera ses ressources pour générer les chunks.

- Un trop grand nombre d'entités qui peut être aussi très problématique pour votre serveur. Plus il y a d'entités, plus le serveur doit faire tout un tas de calcul sur ces entités (la gestion du spawn, les mouvements, les actions, etc ...). Notez aussi qu'en parlant d'entités, je parle aussi des items (les tiles entities) qui se baladent dans les coffres/entonnoirs/minecart et autres blocs de ce type.

- Les bloc de commande (ou command blocks) trop nombreux ou trop gourmand à cause des fonctions enregistrées à l'intérieur.

- La view-distance / simulation-distance renseignée dans le fichier server.properties de votre serveur. Cette valeur définit la quantité de données du monde du serveur envoyée au client, mesurée en tronçon (chunck) dans chaque direction du joueur. Et plus cette view-distance est élevée, plus le serveur va consommer de ressources pour transmettre toutes les données au client. Je conseille une distance de vue à 10 et une distance de simulation à 6.

- Les datapack / plugins / mods de votre serveur. C'est très vague bien évidemment mais certains peuvent être très gourmands ou mal optimisés.

Il y a bien évidemment d'autres possibles sources de lags mais vous avez les principales avec cette liste.

2 - Les premiers réflexes à avoir pour réduire les lags
Il existe tout un tas de possibilités pour réduire les lags, certaines étant directement liées à la liste ci-dessus. Dans la liste ci-dessous, je vais vous donner les principales choses à faire pour améliorer les performances de votre serveur. Encore une fois, c'est une liste non exhaustive :

- La première chose à faire en terme de prévention de lag est de pré-générer vos maps. Cela permettra d'économiser beaucoup de ressources à votre serveur et d'éviter d'avoir des lags quand des joueurs exploreront les maps. Pour ça, vous devez utiliser un plugin comme Chunky ou encore un mod Forge comme Chunk-Pregenerator

- Si vous jouez en Vanilla ou avec des plugins, installez Paper. Les versions Vanilla, CraftBukkit et Spigot sont loin d'être optimisées et Paper permettent justement de pallier à ce manque d'optimisation. Une fois qu'il est installé, n'hésitez pas à suivre ce premier tutoriel pour optimiser sa configuration :

- Limitez le nombre d'entités de votre serveur. Pour ça, prenez dans un premier temps le soin d'analyser la configuration de Spigot et Paper, ils proposent justement différentes options pour réduire le nombre et le taux de spawn des entités. Attention aussi à ne pas être trop gourmand sur tous les blocs un peu spéciaux comme les entonnoirs, les pistons ou autre bloc de ce style.

- Vérifiez que vous êtes bien à jour sur vos versions. De nombreux plugins et de nombreux mods ont souvent des mises à jour pour régler des problèmes de performances.

Ces premiers réflexes devraient déjà vous permettre d'économiser quelques ressources sur votre serveur et de réduire voir supprimer les lags de votre serveur. Si les lags persistent, il y a certainement d'autres sources et c'est là qu'interviennent un outil appelé Spark que je vais vous présenter pour identifier ces sources.

3 - Analyser votre serveur pour trouver les sources des lags
Je vais donc vous présenter l'outil Spark : c'est un formidable outil qui va analyser tout ce qu'il se passe sur votre serveur et vous permettre d'avoir des informations détaillées sur celui-ci.

La première chose à faire est donc de télécharger et d'installer Spark. Pour ça, cliquez sur le lien suivant pour vous diriger vers la page de téléchargement et télécharger la version correspondante à votre serveur :
Mettez le fichier téléchargé sur votre serveur dans le dossier "plugins" (si vous avez un serveur classique sous Spigot/Paper ou autre) ou dans le dossier "mods" (si vous avez un serveur moddé sous Forge ou Fabric). Ensuite, redémarrez votre serveur pour que Spark s'installe.

La première commande va vous permettre de vérifier si le problème vient du serveur ou de votre connexion. Cette commande est la /spark tps.
Celle-ci va vous fournir deux informations : les TPS (Ticks Per Second) de votre serveur qui indique l'état de santé global de votre serveur et l'usage du CPU.

1711531182284.png

L'information la plus directe pour savoir si votre serveur est en bonne santé sont vos TPS. Un serveur en bonne santé et sans lags est un serveur à 20 TPS. Et plus ce chiffre est bas, plus votre serveur va subir des lags importants qui vont dégrader la fluidité de votre serveur.

Si les TPS de votre serveur sont bas, vous avez à votre disposition l'outil profiler de Spark qui va analyser tout ce qu'il se passe sur votre serveur pendant un certain temps pour ensuite vous fournir un lien avec les informations nécessaires pour trouver les différentes sources de lags :

1) Utilisez la commande suivante :
- Si vous avez des lags constants, faites la commande suivante : /spark profiler --timeout 30
- Si vous avez des pics de lags de temps en temps, faites la commande suivante : /spark profiler --only-ticks-over 100 --timeout 30
2) Patientez les 30 secondes indiquée dans la commande (vous pouvez mettre 60 si vous voulez que l'analyse dure 60 secondes par exemple)
3) Après le délai indiquée, vous allez obtenir un lien, cliquez dessus pour l'ouvrir et accéder à une page web qui va contenir les résultats de l'analyse.
4) Descendez en bas de page puis dépliez les lignes jusqu'à tomber sur une information pertinente.

Pour trouver les différentes sources de lags, la première chose est d'identifier les lignes avec un haut pourcentage. Plus le pourcentage est haut, plus le serveur est sollicité. Dans mon exemple, en dépliant les lignes une à une, j'arrive sur une ligne très intéressante : net.minecraft.world.entity.monster.EntityZombie.tick() 92.32%

1711531511045.png


Cette ligne indique que 92,32% d'un tick du serveur est uniquement dédié à gérer les zombies du serveur. C'est bien évidemment un chiffre bien trop élevé pour de la gestion d'entité. Pour les tests, j'ai effectivement fait spawn des milliers de zombies que j'ai concentrés à un seul endroit comme pourraient le faire des joueurs avec des machines automatiques et d'autres entités comme des poulets par exemple.

Sur les dernières versions de Spark, vous pouvez aussi avoir un aperçu détaillé du nombre d'entité depuis l'onglet "World" au dessus de ces lignes :

1711531845681.png


On voit bien qu'il y a 4397 zombies concentré sur un seul chunk. C'est bien trop élevé et c'est clairement la source des lags.

Bien évidemment, ceci n'est qu'un exemple, il existe un nombre incalculable de possibilités et les sources peuvent être multiples : trop d'entités, un mod trop gourmand, un plugin défectueux ... À vous d'utiliser Spark pour analyser et trouver ces causes.

-​

Avec Spark, vous êtes normalement en mesure de trouver vous même les différentes sources de lags de votre serveur. Si vous avez toujours des lags après tout ça et que vous voulez que d'autres personnes vous aide à trouver les différentes sources de lags, n'hésitez pas à fournir un maximum de détails :
- Fournissez toujours un profiler Spark. Même si le contenu vous semble incompréhensible, c'est une véritable mine d'or remplie d'information sur votre serveur et c'est la première chose qu'on va vous demander de faire.
- Indiquez votre type de serveur et son contenu dans les grandes lignes. Par exemple, si vous avez un serveur avec des plugins ou des mods, n'hésitez pas à fournir la liste complète, cela peut donner des premières pistes de résolution aux autres personnes.
- Indiquez si vous avez bien les dernières versions des plugins et des mods sur votre serveur. Si ce n'est pas le cas, n'hésitez pas à fournir leurs versions.
- En bref, donnez un maximum de détails pour qu'on puisse vous aider du mieux possible.

C'est la fin de ce tutoriel, n'hésitez pas à venir sur le Discord de MineStrator si vous avez besoin d'aide pour analyser vos profiler Spark.
Bon jeu :cool:
 

Haut