Rapport de benchmark
Pointes de tick · IA des mobs
Les pires ticks valent plusieurs fois la moyenne. Le TPS moyen reste bon pendant que les joueurs sentent les à-coups.
- mspt_avg = 101 ms
- mspt_p99 = 307,52 ms
- spike_ratio = 3,04 ratio
- sample_count = 88 count
Test le plus faible : IA des mobs, 11,01 TPS en moyenne. Les 15 autres tests tiennent au moins 19,96 TPS.
Face aux autres serveurs
La comparaison avec les autres serveurs porte sur les rapports notés par la version 8.3.0 du barème. Ce rapport a été noté par une autre version : son score n'est pas comparable.
Ce qu’il faut retenir
Tiré des mesures, jamais estiméPointes de tick
Les pires ticks valent plusieurs fois la moyenne. Le TPS moyen reste bon pendant que les joueurs sentent les à-coups.
- mspt_avg = 101 ms
- mspt_p99 = 307,52 ms
- spike_ratio = 3,04 ratio
- sample_count = 88 count
Configuration serveur modifiée
Comparez avec prudence à un serveur réglé par défaut.
- view-distance 12 (défaut 10)
- simulation-distance 4 (défaut 10)
- spawn-limit.monster 50 (défaut 70)
+5 autres réglages modifiés
Quota de cœurs
La JVM voit bien moins de cœurs que l'hôte n'en annonce. Tout ce qui se parallélise est borné par le conteneur, pas par la machine.
Cause probable : quota de cœurs
- host_threads = 20 cores
- usable_cores = 10 cores
- core_ratio = 2 ratio
›+2 autres constats
memorynon mesuréAucune latence d'accès n'a été publiée : la note en a supposé une défavorable. Publier la mesure ne peut que servir.
- assumed_latency_ns = 180 ns
- reference_latency_ns = 120 ns
disknon mesuréL'hôte a refusé l'accès direct : la part aléatoire de la note disque repose sur une hypothèse, pas sur une mesure.
- assumed_random_mbps = 90 MB/s
- reference_random_mbps = 150 MB/s
Un constat se tait plutôt que d'attribuer une cause sans preuve. Une cause absente est une réponse, pas un oubli.
Test par test
Les problèmes d’abord — choisissez une ligne pour le test complet- IA des mobsEntités11,01InstableCritique
- Chargement de chunksExploration19,96ModéréeSain
- Ticking des chunksExploration19,96StableSain
- Performance mémoireMémoire & Stockage19,98StableSain
- Physique des blocsStress mono-cœur20,00ModéréeSain
- Croissance par poudre d'osMécaniques20,00StableSain
- Performance disqueMémoire & Stockage20,00StableSain
- ExplosionsMécaniques20,00StableSain
- Entonnoirs (hoppers)Mécaniques20,00StableSain
- Mise à jour de lumièreExploration20,00ModéréeSain
- CPU multi-cœurCPU20,00StableSain
- Réseau (NBT)Réseau20,00StableSain
- RedstoneStress mono-cœur20,00StableSain
- Mono-cœur (aligné sur les ticks)CPU20,00StableSain
- Tile entities tickéesMécaniques20,00StableSain
- Sauvegarde du mondeMécaniques20,00StableSain
Les réglages que vos mesures justifient
Chaque réglage ci-dessous est déclenché par une mesure de ce rapport, et nomme le test à rejouer pour savoir s’il a servi.
Réduire la portée d’activation des monstres
world-settings.default.entity-activation-range.monsters: 24Mesuré : mobAI.mspt.avg 101.0 ms (seuil 35.0 ms)
L’intelligence des créatures coûte plus par tick que le budget ne l’autorise. La portée d’activation décide à quelle distance d’un joueur un monstre continue de réfléchir ; la réduire endort les plus lointains sans les supprimer.
Test à rejouer : mobAI
Ces réglages échangent un peu de fidélité de jeu contre du budget de tick. Appliquez-en un à la fois et rejouez le test nommé : l’effet reste une hypothèse tant que vous ne l’avez pas mesuré.
Briefing pour un modèle de langage
Collez-le dans l’assistant de votre choix pour le faire reformuler. Il porte déjà tous les nombres : le modèle n’en a donc aucun à inventer.
{
"format": "voxelbench.tuning.v1",
"instruction": "Rewrite each recommendation below as plain prose for a server operator. Every number you are allowed to use is already in this document: the measured value, its threshold, and the proposed setting. Do not compute, estimate or predict any other number, and never state an expected gain. Keep every setting name and value exactly as written.",
"server": {
"type": "purpur",
"minecraft": "1.21.11",
"java": "25.0.3"
},
"recommendations": [
{
"id": "spigot.portee-activation-monstres",
"family": "spigot",
"measure": "mobAI.mspt.avg",
"value": 101,
"unit": "ms",
"threshold": 35,
"control_test": "mobAI",
"file": "spigot.yml",
"setting": "world-settings.default.entity-activation-range.monsters",
"proposed_value": "24",
"current_value": null
}
]
}Ligne de démarrage Java
Les options avec lesquelles ce serveur a démarré, vérifiées pour sa version de Java. Les corrections réparent ce qui est faux à coup sûr ; les pistes à tester sont des réglages à mesurer, jamais appliqués à votre place.
Ligne actuelle (44 arguments)
Les valeurs des propriétés système, des agents et des chemins de fichiers ne sont jamais affichées : elles apparaissent comme <redacted>.
-Dterminal.jline=false -Dterminal.ansi=true -DIReallyKnowWhatIAmDoingISwear -XX:+DisableExplicitGC -XX:+ParallelRefProcEnabled -XX:+PerfDisableSharedMem -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1HeapRegionSize=8M -XX:G1HeapWastePercent=5 -XX:G1MaxNewSizePercent=40 -XX:G1MixedGCCountTarget=4 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1NewSizePercent=30 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:G1ReservePercent=20 -XX:InitiatingHeapOccupancyPercent=15 -XX:MaxGCPauseMillis=200 -XX:MaxTenuringThreshold=1 -XX:SurvivorRatio=32 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -Xms256M -Xmx29491M
À corriger
- DangerTas trop proche de la limite du conteneur
-Xmx29491MLe tas peut prendre 29491 Mio des 34406 Mio du conteneur, ce qui laisse 4915 Mio pour tout le reste (code, fils, tampons réseau). Sous charge, le serveur peut être tué sans la moindre erreur Java. La ligne corrigée garde 5161 Mio hors du tas.
- NoteOption donnée plusieurs fois
-XX:+DisableExplicitGCLa JVM ne garde que la dernière occurrence (-XX:+DisableExplicitGC) ; les précédentes ne font rien, sinon tromper qui lit la ligne.
- NoteOption donnée plusieurs fois
-XX:+ParallelRefProcEnabledLa JVM ne garde que la dernière occurrence (-XX:+ParallelRefProcEnabled) ; les précédentes ne font rien, sinon tromper qui lit la ligne.
- NoteOption donnée plusieurs fois
-XX:+PerfDisableSharedMemLa JVM ne garde que la dernière occurrence (-XX:+PerfDisableSharedMem) ; les précédentes ne font rien, sinon tromper qui lit la ligne.
- NoteOption donnée plusieurs fois
-XX:+UnlockExperimentalVMOptionsLa JVM ne garde que la dernière occurrence (-XX:+UnlockExperimentalVMOptions) ; les précédentes ne font rien, sinon tromper qui lit la ligne.
- NoteOption donnée plusieurs fois
-XX:+UseG1GCLa JVM ne garde que la dernière occurrence (-XX:+UseG1GC) ; les précédentes ne font rien, sinon tromper qui lit la ligne.
- NoteOption donnée plusieurs fois
-XX:G1HeapRegionSize=8MLa JVM ne garde que la dernière occurrence (-XX:G1HeapRegionSize=8M) ; les précédentes ne font rien, sinon tromper qui lit la ligne.
- NoteOption donnée plusieurs fois
-XX:G1HeapWastePercent=5La JVM ne garde que la dernière occurrence (-XX:G1HeapWastePercent=5) ; les précédentes ne font rien, sinon tromper qui lit la ligne.
- NoteOption donnée plusieurs fois
-XX:G1MaxNewSizePercent=40La JVM ne garde que la dernière occurrence (-XX:G1MaxNewSizePercent=40) ; les précédentes ne font rien, sinon tromper qui lit la ligne.
- NoteOption donnée plusieurs fois
-XX:G1MixedGCCountTarget=4La JVM ne garde que la dernière occurrence (-XX:G1MixedGCCountTarget=4) ; les précédentes ne font rien, sinon tromper qui lit la ligne.
- NoteOption donnée plusieurs fois
-XX:G1MixedGCLiveThresholdPercent=90La JVM ne garde que la dernière occurrence (-XX:G1MixedGCLiveThresholdPercent=90) ; les précédentes ne font rien, sinon tromper qui lit la ligne.
- NoteOption donnée plusieurs fois
-XX:G1NewSizePercent=30La JVM ne garde que la dernière occurrence (-XX:G1NewSizePercent=30) ; les précédentes ne font rien, sinon tromper qui lit la ligne.
- NoteOption donnée plusieurs fois
-XX:G1RSetUpdatingPauseTimePercent=5La JVM ne garde que la dernière occurrence (-XX:G1RSetUpdatingPauseTimePercent=5) ; les précédentes ne font rien, sinon tromper qui lit la ligne.
- NoteOption donnée plusieurs fois
-XX:G1ReservePercent=20La JVM ne garde que la dernière occurrence (-XX:G1ReservePercent=20) ; les précédentes ne font rien, sinon tromper qui lit la ligne.
- NoteOption donnée plusieurs fois
-XX:InitiatingHeapOccupancyPercent=15La JVM ne garde que la dernière occurrence (-XX:InitiatingHeapOccupancyPercent=15) ; les précédentes ne font rien, sinon tromper qui lit la ligne.
- NoteOption donnée plusieurs fois
-XX:MaxGCPauseMillis=200La JVM ne garde que la dernière occurrence (-XX:MaxGCPauseMillis=200) ; les précédentes ne font rien, sinon tromper qui lit la ligne.
- NoteOption donnée plusieurs fois
-XX:MaxTenuringThreshold=1La JVM ne garde que la dernière occurrence (-XX:MaxTenuringThreshold=1) ; les précédentes ne font rien, sinon tromper qui lit la ligne.
- NoteOption donnée plusieurs fois
-XX:SurvivorRatio=32La JVM ne garde que la dernière occurrence (-XX:SurvivorRatio=32) ; les précédentes ne font rien, sinon tromper qui lit la ligne.
Ligne corrigée à copier
- Retirée
-XX:+DisableExplicitGCoccurrence antérieure ; la JVM garde -XX:+DisableExplicitGC. - Retirée
-XX:+ParallelRefProcEnabledoccurrence antérieure ; la JVM garde -XX:+ParallelRefProcEnabled. - Retirée
-XX:+PerfDisableSharedMemoccurrence antérieure ; la JVM garde -XX:+PerfDisableSharedMem. - Retirée
-XX:+UnlockExperimentalVMOptionsoccurrence antérieure ; la JVM garde -XX:+UnlockExperimentalVMOptions. - Retirée
-XX:+UseG1GCoccurrence antérieure ; la JVM garde -XX:+UseG1GC. - Retirée
-XX:G1HeapRegionSize=8Moccurrence antérieure ; la JVM garde -XX:G1HeapRegionSize=8M. - Retirée
-XX:G1HeapWastePercent=5occurrence antérieure ; la JVM garde -XX:G1HeapWastePercent=5. - Retirée
-XX:G1MaxNewSizePercent=40occurrence antérieure ; la JVM garde -XX:G1MaxNewSizePercent=40. - Retirée
-XX:G1MixedGCCountTarget=4occurrence antérieure ; la JVM garde -XX:G1MixedGCCountTarget=4. - Retirée
-XX:G1MixedGCLiveThresholdPercent=90occurrence antérieure ; la JVM garde -XX:G1MixedGCLiveThresholdPercent=90. - Retirée
-XX:G1NewSizePercent=30occurrence antérieure ; la JVM garde -XX:G1NewSizePercent=30. - Retirée
-XX:G1RSetUpdatingPauseTimePercent=5occurrence antérieure ; la JVM garde -XX:G1RSetUpdatingPauseTimePercent=5. - Retirée
-XX:G1ReservePercent=20occurrence antérieure ; la JVM garde -XX:G1ReservePercent=20. - Retirée
-XX:InitiatingHeapOccupancyPercent=15occurrence antérieure ; la JVM garde -XX:InitiatingHeapOccupancyPercent=15. - Retirée
-XX:MaxGCPauseMillis=200occurrence antérieure ; la JVM garde -XX:MaxGCPauseMillis=200. - Retirée
-XX:MaxTenuringThreshold=1occurrence antérieure ; la JVM garde -XX:MaxTenuringThreshold=1. - Retirée
-XX:SurvivorRatio=32occurrence antérieure ; la JVM garde -XX:SurvivorRatio=32. - Modifiée
-Xmx29491M-Xmx29245Mlaisse 5161 Mio hors du tas.
java -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Xms256M -Xmx29245M -jar server.jar noguiRemplacez server.jar par le jar de votre serveur. Collez la ligne là où votre serveur est démarré : les paramètres de démarrage (ou arguments JVM) de votre panneau d'hébergement, ou votre start.sh / start.bat. Seules les corrections ci-dessus la distinguent de votre ligne actuelle.
Votre ligne actuelle porte aussi 7 autres arguments (propriétés système, agents) : gardez-les entre java et -jar. Leurs valeurs ne sont pas affichées ici.
À tester
Des réglages de performance à essayer un par un, puis à mesurer par un banc avant et après. Aucun n'est appliqué dans la ligne corrigée, et aucun ne vient avec un gain promis.
Des réglages documentés par PaperMC pour les serveurs Minecraft : ils dimensionnent la jeune génération de G1 pour le rythme d'allocation très élevé du jeu et déclenchent les collectes plus tôt. Tas initial et maximal à la même taille, avec AlwaysPreTouch, engagent tout le tas au démarrage : proposés seulement parce que ce tas reste déjà sous la limite mémoire.
-Xms29245MAucune mesure de ce run ne la désigne : elle reste une piste à mesurer.
sourceUn ramasse-miettes aux pauses très courtes pour les gros tas, au prix de plus de processeur et de mémoire. Il remplace le ramasse-miettes actuel : retirez l'option qui le choisit et ses propres réglages, puis mesurez. À partir de Java 23, le mode générationnel est celui par défaut.
-XX:+UseZGCAucune mesure de ce run ne la désigne : elle reste une piste à mesurer.
sourceRelancer et comparer
- Appliquez la ligne corrigée là où votre serveur démarre (paramètres de démarrage du panneau, start.sh).
- Redémarrez le serveur.
- Lancez un nouveau banc :
/bench start - Comparez le nouveau rapport avec celui-ci.
Ce rapport est l'avant ; ajoutez le nouveau rapport à la comparaison quand il sera là. Un seul run de chaque côté dit peu de chose : l'écart entre deux runs d'un serveur inchangé est du bruit.
Toutes les mesures
Chaque test en entier. Les tests en difficulté sont ouverts ; les autres se replient sur leur ligne de résumé.
Stress mono-cœur
RedstoneSain20,00 TPS3,3 ms34.9s
Stress mono-cœur via mises à jour intensives de circuits redstone.
- Ramasse-miettes chargé3 collections, 18ms total
Percentiles et stabilité
Données brutes (12 champs)
Physique des blocsSain20,00 TPS17,2 ms24.9s
Stress mono-cœur via la physique des blocs qui tombent.
- Ramasse-miettes chargé5 collections, 77ms total
Percentiles et stabilité
Données brutes (20 champs)
Exploration
Chargement de chunksSain19,96 TPS4,2 ms7.8s
Vitesse de génération et de chargement des chunks sur plusieurs zones dispersées.
- Ramasse-miettes chargé5 collections, 226ms total
Percentiles et stabilité
Données brutes (11 champs)
Ticking des chunksSain19,96 TPS11,3 ms40.9s
Performance lors du ticking de nombreux chunks chargés avec random-tick activé.
- Ramasse-miettes chargé7 collections, 117ms total
Percentiles et stabilité
Données brutes (14 champs)
Mise à jour de lumièreSain20,00 TPS1,8 ms24.6s
Débit des recalculs de lumière lors de pose / casse de blocs.
Percentiles et stabilité
Données brutes (5 champs)
Entités
IA des mobsCritique11,01 TPS101,0 ms30.3s
Comportements IA complexes (villageois, golems de fer, mobs hostiles).
- Échantillons non filtrés utilisésUsing unfiltered samples (filter rate: 31%)
- Ramasse-miettes chargé15 collections, 230ms total
- Le run n’a pas tenuTPS avg=11.01<19, TPS P1=4.77<15, TPS StdDev=2.31>2, TPS min=4.77 (43% of avg)
Percentiles et stabilité
Données brutes (30 champs)
Mécaniques
Entonnoirs (hoppers)Sain20,00 TPS2,3 ms19.2s
Transferts d'objets intensifs en chaîne via hoppers.
- Ramasse-miettes chargé2 collections, 65ms total
Percentiles et stabilité
Données brutes (19 champs)
ExplosionsSain20,00 TPS4,3 ms17.0s
Explosions massives de TNT et destruction de blocs.
Percentiles et stabilité
Données brutes (60 champs)
Tile entities tickéesSain20,00 TPS1,1 ms35.9s
Nombreuses tile entities qui tickent (fours, hoppers, etc.).
Percentiles et stabilité
Données brutes (7 champs)
Sauvegarde du mondeSain20,00 TPS1,2 ms5.0s
Vitesse de sauvegarde du monde et impact TPS pendant l'opération.
Percentiles et stabilité
Données brutes (5 champs)
Croissance par poudre d'osSain20,00 TPS1,5 ms23.3s
Croissance rapide de cultures et d'arbres via poudre d'os.
Percentiles et stabilité
Données brutes (11 champs)
CPU
Mono-cœur (aligné sur les ticks)Sain20,00 TPS3,2 ms10.0s
Débit mono-thread mesuré sur le thread principal, sous contrainte du tick scheduler.
Percentiles et stabilité
Données brutes (6 champs)
CPU multi-cœurSain20,00 TPS1,1 ms11.6s
Débit de calcul parallèle réparti sur les threads de travail.
Percentiles et stabilité
Données brutes (7 champs)
Mémoire & Stockage
Performance mémoireSain19,98 TPS1,1 ms49.3s
Bande passante et latence de la RAM.
Mesures via JVM — ne reflètent pas les performances bare-metal réelles.
- Ramasse-miettes chargé4 collections, 43ms total
Percentiles et stabilité
Données brutes (8 champs)
Performance disqueSain20,00 TPS1,5 ms16.7s
Lecture / écriture séquentielle et aléatoire 4K.
Mesures via JVM — ne reflètent pas les performances bare-metal réelles.
- Ramasse-miettes chargé23 collections, 227ms total
Percentiles et stabilité
Données brutes (7 champs)
Réseau
Réseau (NBT)Sain20,00 TPS23,6 ms20.0s
Débit de sérialisation — proxy de la vitesse à laquelle le serveur peut transmettre les données monde aux clients.
- Ramasse-miettes chargé29 collections, 78ms total
Percentiles et stabilité
Données brutes (9 champs)
›Machine et serveurIntel(R) Core(TM) Ultra 7 265 · Purpur · 1.21.11
Détail des scores
Scores détaillés par sous-catégorie