🪛Оптимизация сервера
В данной статье вы сможете прочесть о том, как оптимизировать ваш сервер.
Эта статья не является переводом. Она является сборником мелких советов и наводок.
За примерами настроек - переходите к оригинальной статье. Она на английском, но для копирования оптимальных значений английский знать не надо.
Некоторые части статьи могут быть неактуальны для определённых версий.
На момент написания статьи - игровые сервера Minecraft используют всего один поток процессора для работы. По этой причине такты и задачи не могут обрабатываться параллельно.
Цикл игровых тактов
Практически каждая игра, включая Minecraft, работает на основе большого программного цикла. Работа сервера разбита на "такты".
Каждый раз, когда проходит игровой такт - выполняются различные события, обрабатывающиеся процессором:
Чтение пакетов, исходящих от игроков (Например движение, установка/разрушение блоков, атакование других сущностей);
Обновление позиции игроков и других сущностей;
Отправка входящих пакетов всем игрокам, связанных с происходящим на сервере (Изменения блоков, движение сущностей и действия, например взаимодействие с жителями или блоками их работ);
Спавн сущностей (Мобов) , просчёт их ИИ и тому подобное;
Обработка действий красной пыли и других механизмов.
И многие другие вещи...
Такты в Minecraft
Сервер игры Minecraft старается работать на 20-ти тактах в секунду. Или, другими словами, один такт каждые 50 миллисекунд.

Когда сервер работает нормально
Когда сервер работает стабильно - время на выполнение одного такта должно быть меньше или равно 50 миллисекундам.
Если время, занявшее выполнение одного такта, менее 50 миллисекунд - сервер будет "спать" оставшееся время до тех пор, пока не придёт время выполнять следующий такт.

Как вы можете видеть - выполнение каждого такта в этом примере заняло менее 50 миллисекунд, но время между ними было заполнено сном, чтобы все 20 тактов уложились ровно в 1 секунду.
Если бы сервер не заполнял время, оставшееся до выполнения следующего такта, сном (Пустотой) - игра бы чувствовалась быстрее и нестабильнее.
Когда сервер не справляется
Если выполнение одного такта занимает более 50-ти миллисекунд - выполнение следующего такта откладывается, так как выполнение тактов не может происходить параллельно. Когда это происходит - игровой процесс становится хуже, вещи становятся менее отзывчивыми и всё начинает "лагать".

Как вы можете видеть - когда определённые такты требуют больше времени на выполнение - всё начинает "сдвигаться вправо", выполняется меньше игровых тактов в тот же промежуток времени.
Отсюда вы можете видеть, откуда берутся показатели TPS (Тактов в секунду) и MSPT (Миллисекунд за такт).
В реалиях показанного выше примера:
TPS будет отображён как 17, поскольку всего 17 тиков было обработано за секунду;
Минимальный MSPT будет ~20 миллисекунд, в то время как максимальный - ~80 миллисекунд, что больше 50-ти.
Такты в плагине Spark
В профилировщике Spark вы можете увидеть цикл тактов, обычно он находится в самом верху.

В примере выше, вы можете увидеть что waitForNextTick()
, - ожидание следующего такта, занимает около 81% активности ЦПУ в потоке сервера. Это хорошо - в среднем это говорит о том, что около 80% тактов обрабатываются менее, чем за 50 миллисекунд.
Это хорошо по той причине, что сервер имеет свободное пространство для выполнения других тактов. К примеру, если на сервере возник скачок активности - зашли игроки или обновилось большое количество сущностей, сервер должен это выдержать без пререканий.
Подытоживая:
Больший процент сна - это хорошо;
Если сервер имеет менее чем 20% сна - значит сервер работает очень интенсивно и может подвисать на некоторых тактах;
Если у сервера менее 5% сна - значит ваш сервер, вероятно, не справляется с обработкой тактов.
Навигация
Last updated