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 le délai prévu (soit 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.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 et nous allons voir comment le vérifier.
1.2 - Les principales sources de lag
Vous avez deux méthodes pour vérifier que votre serveur a des lags :
- La première méthode consiste à utiliser la commande /tps (disponible avec Spigot, Paper ou autre API) ou /forge tps pour les serveurs avec Forge et des mods : un serveur en bonne santé sans lags est un serveur à 20TPS. Bien évidemment, 18TPS reste un score très honorable pour les serveurs avec une centaine de joueurs par exemple, les 20TPS reste la valeur idéale en théorie. Notez simplement que plus vos TPS sont bas, plus votre serveur aura des lags importants.
- La seconde méthode, c'est de vérifier la présence de ce message dans votre console :
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).
Maintenant, il est temps de passer aux principales sources de lags d'un serveur Minecraft. Encore une fois, 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.
- 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 ou CraftBukkit sont loin d'être optimisées et Spigot/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. N'hésitez pas non plus à installer d'autres plugins comme
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 les deux outils que je vais vous présenter pour identifier ces sources.
3.1 - Les timing avec Spigot et Paper
Les timings sont le premier outil que je vais vous présenter. Un timing est une analyse de votre serveur pendant une certaine durée et qui va vous permettre de vérifier toute la consommation des différents éléments de votre serveur. Petite précision, les timings de Paper sont un peu plus complets et donnent plus d'informations que les timings de Spigot.
Pour faire un timing sur votre serveur, il suffit de faire ces deux commandes pendant les lags :
1) Faites la commande /timings on pour lancer un timing et attendez au moins 5 minutes le temps que l'analyse se fasse
2) Après au moins 5 minutes, faites la commande /timings paste. Le timing sera arrêté et vous obtiendrez un lien qui vous ouvrira une page web avec le rapport de l'analyse comme le screen ci-dessous
Pour l'exemple, voici un timing Spigot effectué sur un serveur standard sans aucun plugin en 1.15.2 :
Ce timing nous indique plusieurs choses :
- Average Entities indique les entités actives / le nombre total d'entités sur le serveur pendant le timing. Average Players indique le nombre de joueurs connectés en moyenne pendant le timing et Average TPS indique le TPS moyen pendant le timing.
- On peut voir dans le tableau du dessous que 149% des ticks du serveur sont dédiés à la gestion des entités actives et que 143% des ticks sont dédiés à la seule gestion des zombies sur le serveur.
Pour le test, j'ai effectivement fait apparaître plusieurs centaines de zombies que j'ai concentré dans une seule zone. C'est bien évidemment un cas d'école mais dites-vous que ça reste une possibilité si plusieurs joueurs ont par exemple une ferme à poulet automatique sur votre serveur.
Un autre exemple, c'est quand votre map n'est pas pré-générée. Vous risquez d'avoir un fort pourcentage synonyme de lag sur le tableau du dessous avec un Event similaire à world - doChunkMap ou autre événement similaire sur les chunks.
3.2 - Spark avec Spigot, Paper, Forge ou Fabric
Spark est un autre outil d'analyse plus précis que les timings et qui permet aussi d'obtenir d'autres types d'informations. Il est le seul outil aujourd'hui disponible pour les serveurs avec Forge/Fabric et des mods.
Si vous souhaitez utiliser Spark, je vous invite à consulter ce tutoriel : Analyser les lags de votre serveur avec Spark [1.8+]
Avec ces deux outils, 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 une analyse complète avec un timing et une analyse 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 timings et vos analyses Spark.
Bon jeu
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 le délai prévu (soit 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 et nous allons voir comment le vérifier.
1.2 - Les principales sources de lag
Vous avez deux méthodes pour vérifier que votre serveur a des lags :
- La première méthode consiste à utiliser la commande /tps (disponible avec Spigot, Paper ou autre API) ou /forge tps pour les serveurs avec Forge et des mods : un serveur en bonne santé sans lags est un serveur à 20TPS. Bien évidemment, 18TPS reste un score très honorable pour les serveurs avec une centaine de joueurs par exemple, les 20TPS reste la valeur idéale en théorie. Notez simplement que plus vos TPS sont bas, plus votre serveur aura des lags importants.
- La seconde méthode, c'est de vérifier la présence de ce message dans votre console :
[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).
Maintenant, il est temps de passer aux principales sources de lags d'un serveur Minecraft. Encore une fois, 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 ou CraftBukkit sont loin d'être optimisées et Spigot/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. N'hésitez pas non plus à installer d'autres plugins comme
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 les deux outils 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 deux outils qui doivent être utilisés pour détecter les sources de lags de votre serveur : les timings et Spark.
3.1 - Les timing avec Spigot et Paper
Les timings sont le premier outil que je vais vous présenter. Un timing est une analyse de votre serveur pendant une certaine durée et qui va vous permettre de vérifier toute la consommation des différents éléments de votre serveur. Petite précision, les timings de Paper sont un peu plus complets et donnent plus d'informations que les timings de Spigot.
Pour faire un timing sur votre serveur, il suffit de faire ces deux commandes pendant les lags :
1) Faites la commande /timings on pour lancer un timing et attendez au moins 5 minutes le temps que l'analyse se fasse
2) Après au moins 5 minutes, faites la commande /timings paste. Le timing sera arrêté et vous obtiendrez un lien qui vous ouvrira une page web avec le rapport de l'analyse comme le screen ci-dessous
Pour l'exemple, voici un timing Spigot effectué sur un serveur standard sans aucun plugin en 1.15.2 :
- Average Entities indique les entités actives / le nombre total d'entités sur le serveur pendant le timing. Average Players indique le nombre de joueurs connectés en moyenne pendant le timing et Average TPS indique le TPS moyen pendant le timing.
- On peut voir dans le tableau du dessous que 149% des ticks du serveur sont dédiés à la gestion des entités actives et que 143% des ticks sont dédiés à la seule gestion des zombies sur le serveur.
Pour le test, j'ai effectivement fait apparaître plusieurs centaines de zombies que j'ai concentré dans une seule zone. C'est bien évidemment un cas d'école mais dites-vous que ça reste une possibilité si plusieurs joueurs ont par exemple une ferme à poulet automatique sur votre serveur.
Un autre exemple, c'est quand votre map n'est pas pré-générée. Vous risquez d'avoir un fort pourcentage synonyme de lag sur le tableau du dessous avec un Event similaire à world - doChunkMap ou autre événement similaire sur les chunks.
3.2 - Spark avec Spigot, Paper, Forge ou Fabric
Spark est un autre outil d'analyse plus précis que les timings et qui permet aussi d'obtenir d'autres types d'informations. Il est le seul outil aujourd'hui disponible pour les serveurs avec Forge/Fabric et des mods.
Si vous souhaitez utiliser Spark, je vous invite à consulter ce tutoriel : Analyser les lags de votre serveur avec Spark [1.8+]
-
Avec ces deux outils, 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 une analyse complète avec un timing et une analyse 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 timings et vos analyses Spark.
Bon jeu