---
description: В данной статье вы сможете прочесть о том, как оптимизировать ваш сервер.
---

# Оптимизация сервера

{% hint style="danger" %}
Эта статья не является переводом. Она является сборником мелких советов и наводок.

За примерами настроек - переходите к [оригинальной статье](https://github.com/YouHaveTrouble/minecraft-optimization). Она на английском, но для копирования оптимальных значений английский знать не надо.

<mark style="color:red;">**Некоторые части статьи могут быть неактуальны для определённых версий.**</mark>
{% endhint %}

{% hint style="warning" %}
На момент написания статьи - игровые сервера **Minecraft** используют всего один поток процессора для работы. По этой причине такты и задачи не могут обрабатываться параллельно.
{% endhint %}

## Цикл игровых тактов

Практически каждая игра, включая Minecraft, работает на основе большого программного цикла. Работа сервера разбита на "такты".

Каждый раз, когда проходит игровой такт - выполняются различные события, обрабатывающиеся процессором:

* Чтение пакетов, исходящих от игроков (Например движение, установка/разрушение блоков, атакование других сущностей);
* Обновление позиции игроков и других сущностей;
* Отправка входящих пакетов всем игрокам, связанных с происходящим на сервере (Изменения блоков, движение сущностей и действия, например взаимодействие с жителями или блоками их работ);
* Спавн сущностей (Мобов) , просчёт их ИИ и тому подобное;
* Обработка действий красной пыли и других механизмов.

И многие другие вещи...

### Такты в Minecraft

Сервер игры Minecraft старается работать на **20-ти тактах в секунду**. Или, другими словами, **один такт каждые 50 миллисекунд**.

<figure><img src="https://1677551039-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4XYhopdeBeT33DlWf5m2%2Fuploads%2FDf8l4lhW5ZqBMAfAZbPA%2Fticks-linear-719b3df9e469b960429fa91e007e4a5b.png?alt=media&#x26;token=3b2ea89c-7171-45b1-a49c-07c944e3af62" alt=""><figcaption></figcaption></figure>

### Когда сервер работает нормально

Когда сервер работает стабильно - время на выполнение одного такта должно быть меньше или равно 50 миллисекундам.

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

{% hint style="info" %}
Сервер тратит 15 миллисекунд на выполнение такта `→` сервер "спит" (Ничего не делает) 35 миллисекунд перед тем, как выполнять следующий такт.
{% endhint %}

<figure><img src="https://1677551039-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4XYhopdeBeT33DlWf5m2%2Fuploads%2F7mdtP8AKwXtubWNEc59V%2Fticks-with-sleeping-3b944bf10f5a21b16d1454f2d7fee434.png?alt=media&#x26;token=d9c73b45-1311-4d14-8cf7-5be7fa8fb4c8" alt=""><figcaption></figcaption></figure>

Как вы можете видеть - выполнение каждого такта в этом примере заняло менее 50 миллисекунд, но время между ними было заполнено сном, чтобы все 20 тактов уложились ровно в 1 секунду.

Если бы сервер не заполнял время, оставшееся до выполнения следующего такта, сном (Пустотой) - игра бы чувствовалась быстрее и нестабильнее.

### Когда сервер не справляется

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

<figure><img src="https://1677551039-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4XYhopdeBeT33DlWf5m2%2Fuploads%2FObMwIZGl41xqBkgO73Ma%2Fticks-lagging-0bec1e4f565281af7a643f94222df521.png?alt=media&#x26;token=e728b39e-bca6-4df3-a2c0-e28345450c9a" alt=""><figcaption></figcaption></figure>

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

Отсюда вы можете видеть, откуда берутся показатели **TPS** (Тактов в секунду) и **MSPT** (Миллисекунд за такт).

В реалиях показанного выше примера:

* **TPS** будет отображён как **17**, поскольку всего 17 тиков было обработано за секунду;
* Минимальный **MSPT** будет <mark style="color:green;">**\~20**</mark> миллисекунд, в то время как максимальный - <mark style="color:red;">**\~80**</mark> миллисекунд, что <mark style="color:red;">**больше 50-ти**</mark>.

## Такты в плагине Spark

{% hint style="info" %}
Плагин **Spark** - замечательный инструмент для отладки сервера. Установить его вы можете на его официальном сайте: [https://spark.lucko.me/download](https://spark.lucko.me/download)

_Плагин также есть в виде мода. Там же, на сайте, можно его скачать._
{% endhint %}

В профилировщике **Spark** вы можете увидеть цикл тактов, обычно он находится в самом верху.

<figure><img src="https://1677551039-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4XYhopdeBeT33DlWf5m2%2Fuploads%2F5w4bJQyuqp3CDOZkSyER%2Fticks-in-profiler-9309c0852f4aaf9212874a989a648968.png?alt=media&#x26;token=455751f6-f06f-4ef5-b978-bdd83137536c" alt=""><figcaption></figcaption></figure>

В примере выше, вы можете увидеть что `waitForNextTick()`, - ожидание следующего такта, занимает около 81% активности ЦПУ в потоке сервера. Это хорошо - в среднем это говорит о том, что около 80% тактов обрабатываются менее, чем за 50 миллисекунд.

Это хорошо по той причине, что сервер имеет свободное пространство для выполнения других тактов. К примеру, если на сервере возник скачок активности - зашли игроки или обновилось большое количество сущностей, сервер должен это выдержать без пререканий.

Подытоживая:

* Больший процент сна - это хорошо;
* Если сервер имеет менее чем 20% сна - значит сервер работает очень интенсивно и может подвисать на некоторых тактах;
* Если у сервера менее 5% сна - значит ваш сервер, вероятно, не справляется с обработкой тактов.

{% hint style="info" %}
**Важно отметить: Все значения являются усреднёнными.**

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

Обычно это происходит при "lag spike'ах", что не говорит об общей плохой производительности сервера.
{% endhint %}

## Навигация

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Выбор ядра</strong></td><td>Выбор подходящего ядра.</td><td></td><td><a href="https://1677551039-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4XYhopdeBeT33DlWf5m2%2Fuploads%2FGQOqhpvB45C8OdfzLWxr%2F%D0%92%D1%8B%D0%B1%D0%BE%D1%80%20%D1%8F%D0%B4%D1%80%D0%B0.png?alt=media&#x26;token=820004a9-d5e5-4dfd-b7dd-4d01554c97b7">Выбор ядра.png</a></td><td><a href="cores">cores</a></td></tr><tr><td><strong>Прогрузка чанков</strong></td><td>Процесс предзагрузки чанков.</td><td></td><td><a href="https://1677551039-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4XYhopdeBeT33DlWf5m2%2Fuploads%2Fz3Vt9Md2CyM6cQNyEKGA%2F%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0%20%D1%87%D0%B0%D0%BD%D0%BA%D0%BE%D0%B2.png?alt=media&#x26;token=632c8583-430d-48fe-81db-dc060f0722b6">Прогрузка чанков.png</a></td><td><a href="map-pregen">map-pregen</a></td></tr><tr><td><strong>Настройка конфигураций</strong></td><td>Настройка файлов конфигурации сервера.</td><td></td><td><a href="https://1677551039-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4XYhopdeBeT33DlWf5m2%2Fuploads%2F5a51jj2D4b9hw3kG4iDa%2F%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0%20%D0%BA%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D0%B9.png?alt=media&#x26;token=373367f0-0911-49e7-bf30-cc77baba79a9">Настройка конфигураций.png</a></td><td><a href="configurations">configurations</a></td></tr><tr><td><strong>Частые вопросы</strong></td><td>Часто задаваемые вопросы и ответы на них.</td><td></td><td><a href="https://1677551039-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4XYhopdeBeT33DlWf5m2%2Fuploads%2FvSr08TPpvPtdyP07nzM6%2F%D0%A7%D0%B0%D1%81%D1%82%D1%8B%D0%B5%20%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81%D1%8B.png?alt=media&#x26;token=41e029a2-1272-47f4-8849-c1064f18445e">Частые вопросы.png</a></td><td><a href="faq">faq</a></td></tr></tbody></table>
