Опубліковано 5 вересня, 20245 верес У цій статті опишемо простий спосіб пошуку проблемних компонентів сервера, які впливають на продуктивність на прикладі Timings (далі таймінг). Циклічність Minecraft реалізована на тиках або такт (англ. tick) - програмна одиниця часу Minecraft'а, на якій заснована вся ігрова механіка. Являє паузу між повторами циклу оновлень ігрового світу. В одній секунді 20 тиків, що означає, що один тик повинен статися через кожні 50 мілісекунд. Ігрова доба триває 24 000 тактів або 20 хвилин. За кожен такт змінюються багато ігрових аспектів: об'єкти, що рухаються, змінюють положення в просторі, моби перевіряють оточення і оновлюють поведінку, змінюються здоров'я і голод гравця під зовнішнім впливом, і багато іншого. Єдина річ, незалежна від ігрового циклу та тактів — промальовування графіки. Промальовування відбувається в окремому, асинхронному циклі. Це захищає зображення від "гальм" ігрової механіки, і навпаки - ігровий процес від повільного промальовування. (sic) Під час одного з цих тактів, обробляються всі події на сервері (ігрові такти (про які вище), таких як завантаження чанків і гравців, що взаємодіють з блоками), і кожен плагін на сервері так само збирає інформацію і обробляє її в період такту (наприклад, такий плагін як WorldGuard використовує PlayerMoveEvent щоб переконатися, що гравець там, де він мав бути виходячи з минулого такту). Дані таймінгів стає корисними для адміністраторів серверів. Вони дозволяють контролювати, скільки часу витрачають плагіни на обробку подій на вашому сервері. Це дозволяє побачити, де виникають лаги, які можу призвести до затримок зміни такту, таким чином нормалізувати кількість тактів на рівні 20. Tick per second "TPS" (кількість тактів на секунду на сервері можна дізнатися використовуючи команду /lag (при встановленому плагіні Essentials наприклад) Використання Timing Parser Aikar 's Використання Timing Parser Aikar's дозволяє полегшити сприйняття зібраних таймінгів на сервері. Звіти поділяються на секції для кожного плагіна. Перші дві секції є стандартними для серверів Minecraft (Завантаження/розвантаження чанків і т.д.), інші належать плагінам (відсортовано за загальним часом, роботи плагіна). (Так, все правильно. Встановлено і чи знаходиться плагін у роботі і які процеси виконує на даний момент, це різні поняття) У верхній частині звіту, є кілька колонок, загальні дані: Total: загальний час обробки подій. Sample Time: Час, витрачений для збору пакета для звіту. Average Entities: Середня кількість активних еніті/ загальна кількість еніті. Entities всі динамічні та рухомі об'єкти у світі Minecraft Average Players: Середня кількість підвантажених гравців у зборі даних. Average TPS: Середній TPS протягом збору даних. У заголовках розділів для плагінів, є два пункти, що містять ім'я і версію плагіну а також параметри: Total: Загальний час активності плагіна Pct: Відсоток активності плагіна від Sample Time для цього плагіна. Кожна секція має кілька стовпців даних: Pct Total: Відсоток часу для певного процесу, витраченого на обробку подій від головного параметра Total , тобто від загального часу активності плагіна. Формула: Total / Sample Time Pct Tick: Відсоток на один такт (50 ms) при обробці події. Формула : Середня кількість TPS /50ms Total: Загальний час, витрачений на обробку події. Avg: Середня кількість часу за такт. Count: Загальна кількість разів, коли ця подія оброблялося плагіном. Event: Ім'я події. Pct Total є хорошим показником загальної кількості тактів сервера (TPS). Якщо певна подія займає велику кількість часу щоб обробити себе, це може означати, що вона несе відповідальність за лаги, тому що для обробки даного процесу витрачається більша кількість тактів, відповідно частина з них відкидається. Колонка Pct Tick є корисною для виявлення підвісу дій у гравців (наприклад затримка відправки повідомлень в чат або авторизація на сервері). Наприклад, якщо ваші гравці скаржаться, що сервер зависає тільки при вході в гру, було б доцільно вивчити процес PlayerJoinEvent. Велика кількість у колонці Pct Tick і низька кількість у стовпці Count може означати, що плагін витрачає багато часу на один такт обробки події, і таким чином викликаючи підвисання. У поєднанні з Avg це означатиме, що плагін є остаточною причиною стійких лагів, що повторюються. Збір інформації в парсер У даній графі я опишу, яким способом можна отримати інформацію в Aikar's timing parser Конфігурація (тільки для білдів 1261 - 1537) на нових білдах міняти нічого не треба Не рекомендується для останніх версій Spigot. По-перше, зупинити сервер, щоб запобігти перезапису змін, які будуть внесен Відкрити bukkit.yml текстовий редактор. Знайти пункт plugin-profiling та змінити його з false "за умовчанням" на true. Зберегти дані та запустити сервер Наберіть команду /timings on Залиште ваш сервер працювати не менше 1 хвилини під час затримки або до сплеску лагів, якщо ви вирішили проаналізувати що відбувається. Введіть команду "/timings paste" або у вашому клієнті (якщо ваш обліковий запис має відповідні дозволи) або консолі. Якщо ви не задоволені результатом або хочете скоротити час збору даних під час лагів, запустіть /timings reset для скидання даних і повторіть процес копіювання в парсер. Рекомендується формувати звіт через кілька хвилин після запуску остаточного складання сервера та наповненням його гравцями. Для включення формування звіту використовуйте команду " / timings on" і вимкнення " / timings off" відповідно
Приєднуйтесь до обговорення
Ви можете написати зараз та зареєструватися пізніше. Якщо у вас є обліковий запис, авторизуйтесь, щоб опублікувати від імені свого облікового запису.
Примітка: Ваш пост буде перевірено модератором, перш ніж стане видимим.