Πώς λειτουργεί το Minecraft (Τι προκαλεί την καθυστέρηση;)
Τυπικές αιτίες υστέρησης
Αναφορές χρονοδιαγράμματος για Spigot/PaperSpigot
Αναφορές χρονοδιαγράμματος για το Sponge
Βήματα για τη μείωση της καθυστέρησης
Πώς λειτουργεί το Minecraft (Τι προκαλεί την καθυστέρηση;)
Το κλειδί για να κατανοήσετε τι προκαλεί καθυστέρηση είναι να κατανοήσετε πώς λειτουργεί το Minecraft. Όλα τα λογισμικά διακομιστή Minecraft λειτουργούν σε παρόμοιο θέμα με ένα βασικό πρόβλημα: δεν υπάρχουν όρια πολλαπλών νημάτων ή χρονισμού για τον κύριο βρόχο παιχνιδιού. Όταν ο διακομιστής πηγαίνει στο tic, εκτελείται μέσω κάθε ενημέρωσης TileEntity, ενημέρωσης οντότητας, ενημέρωσης αποκλεισμού, συμβάντων και άλλων διεργασιών μέχρι να ολοκληρωθεί. Όλα αυτά συμβαίνουν σε ένα νήμα και ο επόμενος βρόχος δεν μπορεί να ξεκινήσει μέχρι να τελειώσει ο τρέχων. Ο κόσμος δεν θα ενημερώνεται, οι παίκτες δεν θα εμφανίζονται να κινούνται και οι οντότητες θα παγώσουν στη θέση τους. Στην ιδανική περίπτωση, κάθε τικ δεν θα πρέπει να διαρκεί περισσότερο από 50 ms για να διατηρηθούν 20 τικ ανά δευτερόλεπτο (TPS). Αυτό μπορεί να φτάσει έως και 55,55 ms για 18 TPS με ελάχιστα προβλήματα. Κάτι χαμηλότερο από αυτό και θα αρχίσετε να βλέπετε υστέρηση.
Τυπικές αιτίες υστέρησης
Υπάρχουν πολλά πράγματα που μπορούν να προκαλέσουν καθυστέρηση, αλλά μερικά από αυτά θα είναι ο πιο πιθανός ένοχος για τους περισσότερους διακομιστές.
- Χρήση αρχείου : Οποιοδήποτε πρόσθετο που διαβάζει συνεχώς από τα αρχεία του προγράμματος αναπαραγωγής, ειδικά σε συμβάντα όπως κίνηση, ζημιά ή αλληλεπίδραση. Μερικά παραδείγματα θα ήταν ορισμένες σημαίες PVP ή πρόσθετα Glow που θα διαβάζουν συνεχώς από τα αρχεία του προγράμματος αναπαραγωγής.
- Επίπεδα αρχεία ως βάση δεδομένων : Όταν έχετε προσθήκες που χρησιμοποιούν μεγάλα αρχεία για να παρακολουθούν πολλά δεδομένα που επαναλαμβάνονται μέσω αυτού του αρχείου ή στη μνήμη, ανάλογα με τον τρόπο αποθήκευσής τους, θα χρειαστεί πολύς χρόνος. Πολλά πρόσθετα το κάνουν αυτό και δεν λαμβάνουν προφυλάξεις για το πώς, όταν οι βάσεις δεδομένων φουσκώνουν, ο χρόνος επεξεργασίας θα επηρεάσει το tic των διακομιστών. Αυτό θα το δείτε πολύ όταν φορτώνετε μεγάλες παραμέτρους MagicSpells ή όταν χρησιμοποιείτε συστήματα αδειών που χρησιμοποιούν YAML αντί για σωστή βάση δεδομένων, όπως το PEX και το GroupManager.
- Πάρα πολλές λειτουργίες : Όταν ένα πρόσθετο δημιουργεί πάρα πολλές οντότητες ή προσπαθεί να εκτελέσει σύνθετες εργασίες σε συμβάντα όπως η κίνηση, θα αρχίσετε να βλέπετε καθυστέρηση. Ακόμα κι αν κάθε εκτέλεση διαρκεί λιγότερο από 1 ms, όταν επεξεργάζεστε ένα συμβάν 20 χιλιάδες φορές το δευτερόλεπτο γίνεται εκθετικό. Οι προσθήκες που μπορούν να προκαλέσουν αυτό είναι οι προσθήκες παγκόσμιας επεξεργασίας, όπως το VoxelSniper και το WorldEdit. ή πρόσθετα προστασίας όπως το Anti Cheats και το World Protections.
- Φορτώθηκαν πάρα πολλά κομμάτια : Ένα κομμάτι είναι
16*16*256
. Αυτό μπορεί να μην ακούγεται πολύ, αλλά όταν πολλαπλασιαστεί αυτό σημαίνει ότι υπάρχουν 65.536 μπλοκ ανά κομμάτι. Κάθε παίκτης μπορεί να έχει πάνω από 200 κομμάτια φορτωμένα γύρω του, ανάλογα με τη διαμόρφωσή σας. Αυτό είναι πάνω από 13.107.200 μπλοκ. Αυτό καταλαμβάνει πολλή μνήμη. Επίσης, αν ακόμη και το 1% αυτών είναι TileEntities, τότε έχουν φορτωθεί 131.072 TileEntities που πρέπει να ενημερώνουν κάθε tic. Τα Mods είναι διαβόητα για τους αργούς χρόνους επεξεργασίας στα TileEntities.
- Cascading WorldGen : Αυτό συμβαίνει όταν ένα πρόσθετο ή ένα mod δημιουργεί δομές έξω από το κομμάτι που του δίνεται. Αυτό αναγκάζει το επόμενο κομμάτι να φορτώσει, να δημιουργήσει και στη συνέχεια να το ενεργοποιήσει ξανά, εάν αρχίσει επίσης να υπερχειλίζει δομές στο επόμενο κομμάτι. Αυτό είναι κακός σχεδιασμός για λογαριασμό των δημιουργών και κάθε προσθήκη ή mod που το κάνει αυτό θα πρέπει να αφαιρεθεί αμέσως.
- Οντότητες πλακιδίων : Δείτε την ενότητα LagGoggles παρακάτω.
Η εύρεση της αιτίας της καθυστέρησης είναι γενικά μια απλή διαδικασία στις μέρες μας, καθώς τα περισσότερα λογισμικά διακομιστή Minecraft είναι κατασκευασμένα με εργαλεία δημιουργίας προφίλ.
Αναφορές χρονοδιαγράμματος για Spigot/PaperSpigot
Για να λάβετε μια λεπτομερή αναφορά χρονισμού, μπορείτε να χρησιμοποιήσετε την εντολή follow.
/timings on
Θα θέλετε να περιμένετε λίγα λεπτά και να το αφήσετε να καθυστερήσει όσο τρέχουν οι χρονισμοί σας. Μετά από λίγο, δημιουργήστε την αναφορά.
/timings paste
Αυτό θα σας δώσει έναν σύνδεσμο προς έναν ιστότοπο με μια ωραία ανάλυση της αναφοράς με εύκολες επιλογές για να κάνετε κοσκίνισμα όλων των δεδομένων που λαμβάνετε. Μπορείτε να μάθετε περισσότερα για το πώς να τα διαβάσετε στο wiki χρονισμού του Spigot .
Θα θέλετε να απενεργοποιήσετε τους χρονισμούς στη συνέχεια, καθώς δεν θέλετε τα ανεπιθύμητα δεδομένα να φράζουν την επόμενη ανάγνωση και οι χρονισμοί προσθέτουν επιπλέον χρόνο στο τικ.
/timings off
Αναφορές χρονοδιαγράμματος για το Sponge
Για να λάβετε μια λεπτομερή αναφορά χρονισμού, μπορείτε να χρησιμοποιήσετε την εντολή follow.
/sponge timings on
Θα θέλετε να περιμένετε λίγα λεπτά και να το αφήσετε να καθυστερήσει όσο τρέχουν οι χρονισμοί σας. Μετά από λίγο, δημιουργήστε την αναφορά.
/sponge timings report
Αυτό θα σας δώσει έναν σύνδεσμο προς έναν ιστότοπο με μια ωραία ανάλυση της αναφοράς με εύκολες επιλογές για να κάνετε κοσκίνισμα όλων των δεδομένων που λαμβάνετε. Δεδομένου ότι το σύστημα χρονισμών του Sponge βασίζεται σε αυτό του Spigot, μπορείτε να μάθετε περισσότερα για το πώς να τα διαβάσετε στο wiki χρονισμού του Spigot .
Θα θέλετε να απενεργοποιήσετε τους χρονισμούς στη συνέχεια, καθώς δεν θέλετε τα ανεπιθύμητα δεδομένα να φράζουν την επόμενη ανάγνωση και οι χρονισμοί προσθέτουν επιπλέον χρόνο στο τικ.
/sponge timings off
Μπορείτε επίσης να επαναφέρετε τους χρονισμούς.
/sponge timings reset
Βήματα για τη μείωση της καθυστέρησης
- Χρησιμοποιήστε τα κατάλληλα ορίσματα για το αρχείο σεναρίου για να εκκινήσετε το Minecraft. Μάθετε περισσότερα για τα κατάλληλα ορίσματα Java εδώ
- Χρησιμοποιήστε το LuckPerms ή έναν διαχειριστή δικαιωμάτων που χρησιμοποιεί μια σωστή βάση δεδομένων αντί για ένα επίπεδο αρχείο
- Αποφύγετε εντελώς τους φορτωτές τεμαχίων
- Αφαιρέστε οτιδήποτε προκαλεί διαδοχική παγκόσμια γενιά
- Περιορίστε τα πρόσθετα Anti Cheat για να μην είστε υπερβολικοί
- Περιορίστε την απόσταση θέασης των παικτών μέσα
server.properties
- Καθαρίστε εχθρικούς όχλους μετά από μια καθορισμένη χρονική περίοδο
- Κάντε επανεκκίνηση του διακομιστή καθημερινά για να καθαρίσετε τις διαρροές από την Java
- ΠΟΤΕ μην επαναφορτώνετε τον διακομιστή, αυτό προκαλεί διαρροές και άλλα προβλήματα
- Χρησιμοποιήστε εκδόσεις FastAsync προσθηκών όπως το WorldEdit και το VoxelSniper
- Περιορίστε το μέγεθος του κόσμου σας, ώστε να μην δημιουργούνται συνεχώς νέα κομμάτια
- Περιορίστε τον αριθμό των προσθηκών που χρησιμοποιείτε. Δεν είναι όλα τα πρόσθετα κατασκευασμένα καλά και όσο περισσότερα έχετε τόσο περισσότερα προβλήματα θα αντιμετωπίσετε
LagGoggles
Ένα μεγάλο μέρος της καθυστέρησης στους τροποποιημένους διακομιστές προέρχεται από οντότητες πλακιδίων. Αυτές είναι οι οντότητες που δημιουργούνται για μπλοκ που χρησιμοποιούνται για την επεξεργασία της λειτουργικότητας και των συμβάντων του μπλοκ. Εάν αυτά διαρκέσουν πολύ ή είναι πάρα πολλά, μπορεί να αυξηθεί ο χρόνος ανά τικ μειώνοντας το συνολικό TPS του διακομιστή. Ένας τρόπος για να απεικονίσετε αυτά τα προβλήματα είναι να χρησιμοποιήσετε ένα mod που ονομάζεται LagGoggles. Μπορείτε να κατεβάσετε αυτό το mod από το CurseForce .