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] Ticks, Mainthread et CPU

Alexis

Administrateur
Staff
Administrateur
Bonjour, dans ce guide nous allons voir ce que signifient les ticks et ce qu’est le mainthread d’un serveur.

Pour commencer, il faut savoir comment Minecraft fonctionne, grossièrement.
Minecraft, comme beaucoup de jeux, fonctionne avec une grande boucle. L’exécution du jeu (Et du serveur) est divisée en “ticks”.
A chaque “tick”, le serveur va effectuer un certain nombre de choses comme :
  • Traiter les packets envoyés par les joueurs (Mouvements, destruction/pose de blocs, attaque des entités, etc)
  • Mettre à jour la position des joueurs et entités
  • Envoyer des packets aux joueurs sur ce qui se passe sur le serveur (Changement de blocs, mouvement des entités, etc)
  • Le spawn des monstres, leur IA, leur pathfinding, etc
  • Traiter la redstone.
Et beaucoup d’autres choses.
Un serveur Minecraft cherche à effectuer 20 de ces “ticks” à chaque seconde, soit un tick toutes les 50 millisecondes.


Quand le serveur fonctionne correctement

Quand le serveur fonctionne correctement, le temps pour effectuer un tick doit être inférieur à 50 millisecondes.
Si le temps pour effectuer le tick est inférieur à 50 millisecondes, le serveur va “dormir” pour le reste du temps, prêt à exécuter le prochain tick.
Exemple : Si le serveur met 15 millisecondes à calculer un tick, il va donc passer 35 millisecondes à attendre le prochain tick.


Quand le serveur lag

Si le tick prend plus de 50 millisecondes, le traitement du prochain tick est retardé, car les ticks ne peuvent pas être effectués en parallèle. Quand ça arrive, le gameplay se détériore et le serveur se met à “lagger”.
Vous recevrez le message “Can’t keep up !” si le serveur a plus de 2000 ms de retard dans le traitement des ticks. Si un serveur met plus de 60 secondes, il sera généralement déclaré en état de crash par le watchdog.

Comment savoir pourquoi mon serveur lag dans ce cas ? C’est très simple, il suffit généralement de faire une analyse Spark pour en trouver la cause. Nous avons un tutoriel à ce sujet juste ici.


Pourquoi le serveur lag

Le serveur “lag” car les ticks n’arrivent pas à s’effectuer en temps voulu. Sur Minecraft, les actions sont ce qu’on appelle “mono-thread”, c'est-à-dire qu’elles sont calculées par un seul cœur du processeur. Pour qu’un zombie attaque un joueur, il faut que le serveur traite d’abord plusieurs choses : Où se trouve le joueur, où se trouve le zombie, quel chemin emprunter, est-il à portée ? Est-il invisible ? Une fois tout cela traité, le serveur peut alors confirmer que le zombie attaque un joueur.
Maintenant, imaginez que le serveur doit faire cela avec 500 zombies. Toutes les 0,05 secondes, le serveur doit faire le calcul pour chacun des zombies. Quand il y a trop d’entités sur un serveur, celui-ci peut ne plus arriver à calculer tout ensemble, c’est par exemple le cas avec les fermes à monstre, ou des fermes restreintes avec beaucoup d’entités. Imaginez 50 poulets enfermés dans 2x2 blocs. Chacun des poulets va “pousser” chaque autre poulet. Cela fait 2500 interactions gratuites infligées au serveur, à faire toute les 0.05 secondes. Vous comprendrez la charge que cela peut infliger.



Ticks Par Secondes

Les TPS sont les Ticks Par Secondes. Un serveur qui tourne à 20 TPS signifie que les 20 ticks demandés sont bien effectués chaque seconde.
Quand le serveur prend du retard à effectuer les ticks, cela se répercute sur les suivants, et vos TPS descendent.
Le calcul se fait comme suit : (1000 - retard en ms) / 50 = x TPS
Si votre serveur a un retard de 250 millisecondes chaque seconde, vos TPS seront donc à 15.
 

Haut