Come funziona Minecraft (Quali sono le cause del ritardo?)
La chiave per capire cosa sta causando il ritardo è capire come funziona Minecraft. Tutti i software server Minecraft funzionano tutti in modo simile con un problema chiave: non ci sono limiti multi-thread o di timing per il loop di gioco principale. Quando il server passa a tic, esegue ogni aggiornamento TileEntity, aggiornamento entità, aggiornamento blocchi, eventi e altri processi fino al completamento. Tutto ciò si verifica su un thread e il ciclo successivo non può iniziare fino a quando quello corrente non termina. Il mondo non si aggiornerà, i giocatori non si muoveranno e le entità saranno congelate sul posto. Idealmente ogni tic dovrebbe richiedere non più di 50ms per mantenere 20 Tic al secondo (TPS). Questo può arrivare a 55,55 ms per 18 TPS con problemi minimi. Qualsiasi inferiore a questo e inizierai a vedere il ritardo.
Cause tipiche di ritardo
Ci sono molte cose che possono causare ritardi, ma alcuni di essi saranno probabilmente i colpevoli della maggior parte dei server.
- Utilizzo dei file : qualsiasi plugin che legge costantemente dai file del lettore, in particolare su eventi come movimento, danno o interazione. Alcuni esempi potrebbero essere alcuni flag PVP o plugin Glow che leggeranno continuamente dai file del lettore.
- File flat come database : quando si hanno plug-in che utilizzano file di grandi dimensioni per tenere traccia di molti dati che ripetono quel file o in memoria, a seconda di come vengono archiviati, impiegherà molto tempo. Molti plugin fanno questo e non prendono precauzioni contro il modo in cui, quando i database si gonfiano, il tempo di elaborazione influenzerà il server. Lo vedrai molto quando si caricano grandi configurazioni MagicSpells o si utilizzano sistemi di autorizzazioni che utilizzano YAML invece di un database appropriato come PEX e GroupManager.
- Troppe operazioni : quando un plugin genera troppe entità o tenta di eseguire attività complesse su eventi come il movimento, inizierai a vedere un ritardo. Anche se ogni esecuzione richiede meno di 1 ms, quando si elabora un evento 20k volte al secondo diventa esponenziale. I plugin che possono causare questo sono plugin di modifica del mondo come VoxelSniper e WorldEdit; o plugin di protezione come Anti Cheats e World Protections.
- Troppi blocchi caricati : un blocco è
16*16*256
. Questo potrebbe non sembrare molto, ma se moltiplicato significa che ci sono 65.536 blocchi per blocco. Ogni giocatore può avere più di 200 pezzi caricati attorno a loro, a seconda della configurazione. Quello è verso l'alto di 13.107.200 blocchi. Questo occupa molta memoria. Inoltre, se anche l'1% di questi sono TileEntities con 131.072 TileEntities caricati che devono aggiornare ogni tic. Le mod sono famose per avere tempi di elaborazione lenti su TileEntities.
- Cascading WorldGen : Questo è quando un plugin o una mod genera strutture al di fuori del blocco che gli viene dato. Questo fa sì che il prossimo blocco venga caricato, generato e quindi riattivato nuovamente se inizia anche a far traboccare le strutture nel blocco successivo. Questo è un cattivo design per conto dei creatori e qualsiasi plug-in o mod che lo fa dovrebbe essere rimosso immediatamente.
- Entità affiancate : vedere la sezione LagGoggles di seguito.
Trovare la causa del ritardo è generalmente una procedura semplice al giorno d'oggi poiché la maggior parte del software server Minecraft è costruita con strumenti di profilazione inclusi.
Rapporti di temporizzazione per Spigot / PaperSpigot
Per ottenere un rapporto sugli orari dettagliato è possibile utilizzare il comando seguente.
/timings on
Ti consigliamo di attendere qualche minuto e lasciarlo ritardare mentre i tuoi tempi sono in esecuzione. Dopo un po ', genera il rapporto.
/timings paste
Questo ti darà un link a un sito web con una bella suddivisione del rapporto con opzioni facili per setacciare tutti i dati che stai ricevendo. Puoi saperne di più su come leggerli nel wiki dei tempi di Spigot .
In seguito vorrai disattivare i tempi, poiché non desideri che i dati spazzatura ostruiscano la lettura successiva e i tempi aggiungono ulteriore tempo al tic.
/timings off
Rapporti sui tempi per Sponge
Per ottenere un rapporto sugli orari dettagliato è possibile utilizzare il comando seguente.
/sponge timings on
Ti consigliamo di attendere qualche minuto e lasciarlo ritardare mentre i tuoi tempi sono in esecuzione. Dopo un po ', genera il rapporto.
/sponge timings report
Questo ti darà un link a un sito web con una bella suddivisione del rapporto con opzioni facili per setacciare tutti i dati che stai ricevendo. Dato che il sistema di cronometraggio di Sponge è basato su quello di Spigot, puoi imparare di più su come leggerli nel wiki dei tempi di Spigot .
In seguito vorrai disattivare i tempi, poiché non desideri che i dati spazzatura ostruiscano la lettura successiva e i tempi aggiungono ulteriore tempo al tic.
/sponge timings off
È inoltre possibile ripristinare i tempi.
/sponge timings reset
I passaggi per ridurre il ritardo
- Usa gli argomenti appropriati per il tuo file di script per avviare Minecraft. Ulteriori informazioni sugli argomenti Java appropriati qui
- Utilizzare LuckPerms o un gestore autorizzazioni che utilizza un database corretto anziché un file flat
- Evitare del tutto i caricatori di pezzi
- Rimuovi tutto ciò che provoca la generazione a cascata del mondo
- Limitare i plug-in Anti Cheat per non essere troppo zelanti
- Limita la distanza di visualizzazione dei giocatori in
server.properties
- Elimina i mob ostili dopo un determinato periodo di tempo
- Riavvia il server quotidianamente per eliminare le perdite da Java
- Non ricaricare MAI il server, ciò causa perdite e altri problemi
- Usa le versioni FastAsync di plugin come WorldEdit e VoxelSniper
- Limita le dimensioni del tuo mondo in modo che nuovi pezzi non vengano costantemente creati
- Limita la quantità di plugin che usi. Non tutti i plug-in sono costruiti bene e più hai, più problemi incontrerai
LagGoggles
Una gran parte del ritardo sui server modificati proviene da entità tile. Queste sono le entità create per i blocchi che vengono utilizzate per elaborare la funzionalità e gli eventi del blocco. Se questi impiegano troppo tempo o ce ne sono troppi, può aumentare il tempo per abbattimento del TPS totale del server. Un modo per visualizzare questi problemi è usare una mod chiamata LagGoggles. Puoi scaricare questa mod da CurseForce .