Comment fonctionne Minecraft (Qu'est-ce qui cause le retard?)
La clé pour comprendre ce qui cause le retard est de comprendre comment fonctionne Minecraft. Le logiciel du serveur Minecraft fonctionne tous dans une affaire similaire avec un problème clé: il n'y a pas de limites de multi-threading ou de synchronisation pour la boucle de jeu principale. Lorsque le serveur passe à tic, il exécute chaque mise à jour de TileEntity, mise à jour d'entité, mise à jour de bloc, événements et autres processus jusqu'à ce qu'il soit terminé. Tout cela se produit sur un thread, et la boucle suivante ne peut pas démarrer jusqu'à ce que celle en cours se termine. Le monde ne se mettra pas à jour, les joueurs ne sembleront pas bouger et les entités seront figées sur place. Idéalement, chaque tic ne devrait pas prendre plus de 50 ms pour maintenir 20 tics par seconde (TPS). Cela peut aller jusqu'à 55,55 ms pour 18 TPS avec un minimum de problèmes. Plus bas que cela et vous commencerez à voir du retard.
Causes typiques de décalage
Il y a beaucoup de choses qui peuvent causer un décalage, mais certaines d'entre elles seront probablement le coupable pour la plupart des serveurs.
- Utilisation des fichiers : tout plugin qui lit en permanence les fichiers du lecteur, en particulier sur des événements tels que le mouvement, les dommages ou l'interaction. Quelques exemples seraient des drapeaux PVP ou des plugins Glow qui liront en continu à partir des fichiers du lecteur.
- Fichiers plats en tant que base de données : lorsque vous avez des plugins qui utilisent des fichiers volumineux pour garder une trace de beaucoup de données itérant dans ce fichier ou en mémoire selon la façon dont il est stocké, cela prendra beaucoup de temps. De nombreux plugins le font et ne prennent pas de précautions contre la façon dont, lorsque les bases de données sont gonflées, le temps de traitement affectera les tics des serveurs. Vous le verrez souvent lors du chargement de grandes configurations MagicSpells ou lors de l'utilisation de systèmes d'autorisations qui utilisent YAML au lieu d'une base de données appropriée telle que PEX et GroupManager.
- Trop d'opérations : lorsqu'un plugin génère trop d'entités, ou tente d'effectuer des tâches complexes sur des événements tels que le mouvement, vous commencerez à voir le décalage. Même si chaque exécution prend moins de 1 ms, lorsque vous traitez un événement 20 000 fois par seconde, il devient exponentiel. Les plugins qui peuvent provoquer cela sont des plugins d'édition du monde tels que VoxelSniper et WorldEdit; ou des plugins de protection tels que Anti Cheats et World Protections.
- Trop de morceaux chargés : un seul morceau l'est
16*16*256. Cela peut ne pas sembler beaucoup, mais une fois multiplié, cela signifie qu'il y a 65 536 blocs par bloc. Chaque joueur peut avoir plus de 200 morceaux chargés autour d'eux, selon votre configuration. C'est plus de 13 107 200 blocs. Cela prend beaucoup de mémoire. En outre, si même 1% d'entre eux sont des TileEntities, 131 072 TileEntities sont chargés et doivent mettre à jour chaque tic. Les mods sont connus pour avoir des temps de traitement lents sur TileEntities.
- WorldGen en cascade : c'est quand un plugin ou un mod génère des structures en dehors du morceau qui lui est donné. Cela provoque le chargement, la génération et le déclenchement du bloc suivant, s'il recommence à avoir des structures qui débordent dans le bloc suivant. C'est une mauvaise conception de la part des créateurs et tout plugin ou mod faisant cela devrait être supprimé immédiatement.
- Entités de tuile : voir la section LagGoggles ci-dessous.
Trouver la cause du retard est généralement une procédure simple de nos jours, car la plupart des logiciels de serveur Minecraft sont construits avec des outils de profilage inclus.
Rapports de synchronisation pour Spigot / PaperSpigot
Pour obtenir un rapport de minutage détaillé, vous pouvez utiliser la commande suivante.
/timings on
Vous aurez envie d'attendre quelques minutes et de le laisser ralentir pendant que votre chronométrage est en cours d'exécution. Après un certain temps, générez le rapport.
/timings paste
Cela vous donnera un lien vers un site Web avec une belle ventilation du rapport avec des options faciles pour passer au crible toutes les données que vous obtenez. Vous pouvez en savoir plus sur la façon de les lire sur le wiki de synchronisation de Spigot .
Vous voudrez désactiver les timings par la suite, car vous ne voulez pas que les données indésirables obstruent votre prochaine lecture, et les timings ajoutent du temps supplémentaire au tic.
/timings off
Rapports de synchronisation pour Sponge
Pour obtenir un rapport de minutage détaillé, vous pouvez utiliser la commande suivante.
/sponge timings on
Vous aurez envie d'attendre quelques minutes et de le laisser ralentir pendant que votre chronométrage est en cours d'exécution. Après un certain temps, générez le rapport.
/sponge timings report
Cela vous donnera un lien vers un site Web avec une belle ventilation du rapport avec des options faciles pour passer au crible toutes les données que vous obtenez. Étant donné que le système de chronométrage de Sponge est basé sur celui de Spigot, vous pouvez en savoir plus sur la façon de les lire sur le wiki de chronométrage de Spigot .
Vous voudrez désactiver les timings par la suite, car vous ne voulez pas que les données indésirables obstruent votre prochaine lecture, et les timings ajoutent du temps supplémentaire au tic.
/sponge timings off
Vous pouvez également réinitialiser les horaires.
/sponge timings reset
Étapes pour réduire le décalage
- Utilisez les arguments appropriés pour votre fichier de script pour lancer Minecraft. En savoir plus sur les arguments Java appropriés ici
- Utilisez LuckPerms ou un gestionnaire d'autorisations qui utilise une base de données appropriée au lieu d'un fichier plat
- Évitez complètement les chargeurs de blocs
- Supprimez tout ce qui provoque une génération mondiale en cascade
- Limitez les plugins Anti Cheat à ne pas être trop zélés
- Limitez la distance de vue des joueurs
server.properties
- Éliminez les foules hostiles après une période de temps définie
- Redémarrez le serveur quotidiennement pour nettoyer les fuites de Java
- NE JAMAIS recharger le serveur, cela provoque des fuites et d'autres problèmes
- Utilisez des versions FastAsync de plugins tels que WorldEdit et VoxelSniper
- Limitez la taille de votre monde afin que de nouveaux morceaux ne soient pas constamment créés
- Limitez la quantité de plugins que vous utilisez. Tous les plugins ne sont pas bien construits et plus vous en avez, plus vous rencontrerez de problèmes
LagGoggles
Une grande partie du décalage sur les serveurs moddés provient des entités de tuiles. Ce sont les entités créées pour les blocs qui sont utilisées pour traiter la fonctionnalité et les événements du bloc. Si ceux-ci prennent trop de temps ou s'il y en a trop, cela peut augmenter le temps nécessaire pour réduire le TPS total du serveur. Un moyen de visualiser ces problèmes est d'utiliser un mod appelé LagGoggles. Vous pouvez télécharger ce mod depuis CurseForce .