Ce que vérifie l’analyseur
spark enregistre ce que fait le serveur plusieurs fois par seconde, et l’envoie en ligne avec les chiffres et les fichiers de config du serveur. L’analyseur lit tout cela et passe en revue quatre choses :
- L’état du serveur. Le TPS et le MSPT des dernières minutes, le CPU, la mémoire, les joueurs et les entités chargées, et une barre par minute pour voir quand il a ralenti.
- Java et la machine. La taille du heap, le garbage collector et s’il utilise les flags d’Aikar, les full GC, la mémoire restante après les collectes, les threads CPU, et si la machine manque de mémoire ou est occupée par autre chose.
- Les réglages. view-distance et simulation-distance dans server.properties, les limites de spawn dans bukkit.yml, les entity activation ranges dans spigot.yml, et les options de Paper et de Purpur pour les explosions, la redstone, les collisions, les spawners, les hoppers, les porte-armures et les villageois. Chaque point indique quel fichier et quelle clé modifier.
- Les plugins. Le temps que prend chaque plugin sur le thread principal, les plugins qui posent souvent problème (ClearLag, PlugMan, les stackers de mobs), et le chunk qui contient le plus d’entités, avec une commande /tp pour y aller.
Les points sont triés de ce qu’il faut corriger en premier jusqu’aux conseils facultatifs. Tant que le serveur suit, les changements de réglages apparaissent comme des conseils : ils libèrent du temps dont vous n’avez pas encore besoin.
Comment créer un profil spark
- Lancez
/spark profiler startdans la console ou en jeu. Sur Paper et Purpur 1.21 et plus récents, spark est déjà intégré. - Laissez-le enregistrer au moins 5 minutes à un moment normal, avec des joueurs connectés. Le profil d’un serveur vide ne montre qu’un serveur au repos.
- Lancez
/spark profiler stop. spark envoie le profil en ligne et affiche un lienhttps://spark.lucko.me/…. - Collez le lien ci-dessus. L’analyse démarre toute seule.
Pour un lag qui arrive par pics plutôt qu’en continu, enregistrez uniquement les ticks lents : /spark profiler start --only-ticks-over 100 garde les ticks qui ont pris plus de 100 ms et ignore le reste.
TPS et MSPT
Le serveur fait tourner le monde en ticks, 20 par seconde, donc chaque tick dispose de 50 ms. Le MSPT (millisecondes par tick) est la durée réelle d’un tick. Tant qu’il reste sous 50, le serveur tient 20 TPS et a de la marge. Dès que les ticks durent plus longtemps, le TPS chute, et les mobs, la redstone et les cultures ralentissent pour tout le monde.
| MSPT | Ce que ça signifie |
|---|---|
| Moins de 30 ms | Beaucoup de marge pour les moments chargés |
| 30 – 45 ms | Correct, mais avec peu de marge |
| 45 – 50 ms | À la limite : le moindre pic se voit |
| Plus de 50 ms | Le serveur prend du retard et le TPS chute |
L’analyseur regarde le 95e percentile, la durée sous laquelle sont restés 95 % des ticks. Une moyenne cache les ticks lents ; le 95e percentile, non.
Lire le temps par plugin
La liste des plugins additionne le temps passé dans le code de chaque plugin sur le thread principal et le divise par le nombre de ticks enregistrés : elle se lit donc en ms par tick, à comparer aux 50 ms dont dispose chaque tick. Un plugin qui prend 5 ms par tick utilise à lui seul un dixième du budget. Le temps qu’un plugin passe à appeler un autre plugin compte pour celui qui est appelé, comme dans le viewer de spark.
Ce qui reste après les plugins, c’est le jeu lui-même : entités, chunks, redstone et joueurs. Les points sur les réglages visent cette partie. Pour voir exactement quelle tâche d’un plugin prend le temps, ouvrez le profil dans le viewer de spark et passez à la vue Sources.
Les changements qui aident le plus en général
- Baissez simulation-distance à 5 ou 6, et view-distance aux alentours de 8. La simulation distance détermine quelle partie du monde tourne autour de chaque joueur, donc elle pèse sur chaque tick.
- Baissez les entity activation ranges dans spigot.yml, pour que les mobs éloignés des joueurs soient tickés moins souvent.
- Utilisez les options de Paper : optimize-explosions, l’implémentation de redstone ALTERNATE_CURRENT, max-entity-collisions à 2 et un tick rate des spawners à 2.
- Lancez Java avec les flags d’Aikar et un heap adapté au serveur. Le calculateur de RAM écrit les deux pour vous.
- Prégénérez le monde avec un plugin comme Chunky, pour que les nouveaux chunks ne soient pas générés pendant que les gens jouent.
Changez une seule chose à la fois et enregistrez un nouveau profil ensuite. Vous saurez ainsi ce qui a aidé, et quoi annuler si une ferme arrête de fonctionner.
Votre profil et la confidentialité
L’analyseur fonctionne dans votre navigateur : le profil est téléchargé directement depuis spark.lucko.me et ne passe jamais par EndyStudio. Gardez en tête qu’un profil spark contient les fichiers de config de votre serveur (spark masque les mots de passe, les IP et les clés similaires), et que n’importe qui ayant le lien peut l’ouvrir.