Туториал Minecraft Spigot Timings

Hidens

Администратор
Команда форума
Spigot Timings

В данной теме опишу простой способ поиска проблемных компонентов сервера, которые влияют на производительность на примере Timings (далее тайминг).

Цикличность Minecraft реализована на тиках или такт (англ. tick) — программная единица времени Minecraft’а, на которой основана вся игровая механика. Представляет из себя паузу между повторами цикла обновлений игрового мира. В одной секунде 20 тиков, что означает, что один тик должен произойти через каждые 50 миллисекунд. Игровые сутки длятся 24000 тактов или 20 минут.

За каждый такт меняются многие игровые аспекты: движущиеся объекты меняют положение в пространстве, мобы проверяют окружение и обновляют поведение, меняются здоровье и голод игрока под внешним воздействием, и многое другое.
Единственная вещь, независимая от игрового цикла и тактов — прорисовка графики. Прорисовка происходит в отдельном, асинхронном цикле. Это защищает изображение от «тормозов» игровой механики, и наоборот — игровой процесс от медленной прорисовки.(sic)

Во время одного из этих тактов, обрабатываются все события на сервере (игровые такты (о которых выше), таких как загрузка чанков и игроков, взаимодействующих с блоками), и каждый плагин на сервере точно так же собирает информацию и обрабатывает ее в период такта (например, такой плагин как WorldGuard использует PlayerMoveEvent чтобы убедиться, что игрок там, где он должен был быть исходя из прошлого такта).

Данные по таймингам становится полезными для администраторов серверов. Они позволяют вам контролировать, сколько времени затрачивают плагины на обработку событий на вашем сервере. Это позволяет увидеть, где возникают лаги, которые могу привести к задержкам смены такта, таким образом нормализовать кол-во тактов на уровне 20.

Tick per second "TPS" (кол-во тактов в секунду на сервере можно узнать используя команду /lag (при установленном плагине Essentials к примеру)
[IMG]


Использование Timing Parser Aikar's

Использование Timing Parser Aikar's позволяет облегчить восприятие собранных таймингов на вашем сервере. Отчеты разделяется на секции для каждого плагина. Первые две секции являются стандартными для серверов Minecraft в (Загрузка/разгрузка чанков и т.д.), остальные принадлежат плагинам (отсортировано по общему времени, работы плагина). (Да, все верно. Установлен и находится ли плагин в работе и какие процессы выполняет на данный момент, это разные понятия)

В верхней части отчета, есть несколько колонок, общее данные:

[IMG]

  • Total: общее время обработки событий.
  • Sample Time: Время, потраченное на сбор пакета для отчета.
  • Average Entities: Среднее кол-во активных энити/ общее кол-во энити.
Entities все динамические и движущиеся объекты в мире Minecraft
  • Average Players: Среднее кол-во подгруженных игроков в сборе данных.
  • Average TPS: Средний TPS в течении сбора данных.
В заголовках разделов для плагинов, есть два пункта содержащие имя и версию плагина

[IMG]
а так же параметры:
  • Total: Общее время активности плагина
  • Pct: Процент активности плагина от параметра Sample Time для этого плагина.
Каждая секция имеет несколько столбцов данных:

[IMG]

  • 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.
  • Сохранить данные и запустить сервер
  1. Наберите команду /timings on
  2. Оставьте ваш сервер работать не менее 1 минуты во время задержки или до всплеска лагов если вы решили проанализировать что происходит.
  3. Введите команду "/timings paste" либо в вашем клиенте (если ваша учетная запись имеет соответствующие разрешения) или в консоли.
Вы получите ссылку на парсер:
[IMG]


Если вы не удовлетворены результатом или хотите сократить время сбора данных во время лагов, запустите "/timings reset" для сброса данных и повторите процесс копирования в парсер.
Рекомендуется формировать отчет через несколько минут после запуска окончательной сборки сервера и наполнением его игроками. Для включения формирования отчета используйте команду "/timings on" и выключения "/timings off" соответвенно

Если вы заметили ошибки, неточности или решили дополнить статью, пишите в теме.
Удачи.
 
Сверху