# Почему важно учитывать нагрузку ферм на сервере?

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

<p class="callout info">Важно помнить что сервер — это не одиночная игра. В одиночной игре вы можете создавать лаги только для себя, и это никому не помешает. На сервере же ваша ферма или большое количество мобов могут ухудшить игровой опыт других игроков. Это не только раздражает, но и снижает производительность всего сервера. Поэтому существуют ограничения на использование ферм и количество мобов.  
</p>

<p class="callout success">Чтобы комфортно играть всем на сервере при 20 TPS, нужно поддерживать MSPT ниже 50. Посмотреть MSPT в игре, можно в табе нажав на клавишу TAB.</p>

![tablist.png](https://wiki.gmgame.ru/uploads/images/gallery/2024-12/scaled-1680-/tablist.png)

##### Почему важно соблюдать ограничения на сервере?

Соблюдение ограничений на сервере — ключ к стабильной и комфортной игре для всех участников. Когда фермы или скопления мобов создают чрезмерную нагрузку, это не только снижает производительность сервера, но и ухудшает игровой опыт других игроков. Ограничения основаны на многолетнем опыте администрирования и наблюдениях, позволяя избежать проблем с производительностью, такими как лаги или краши, и поддерживать стабильную работу сервера.

##### Что такое TPS и MSPT?

[TPS и MSPT](https://spark.lucko.me/docs/guides/TPS-and-MSPT) — это ключевые показатели производительности Minecraft-сервера.

**TPS** (Ticks Per Second) измеряет, сколько игровых тиков сервер обрабатывает за одну секунду. В идеальных условиях TPS всегда должно быть 20 — это значит, что сервер работает без задержек и обрабатывает игровые события с максимальной скоростью.

**MSPT** (Milliseconds Per Tick) показывает, сколько времени уходит на обработку одного игрового тика в миллисекундах. Каждый тик должен обрабатываться за 50 миллисекунд или меньше, чтобы поддерживать TPS на уровне 20. Если MSPT превышает 50, сервер начинает замедляться, что приводит к лагам и снижению TPS.

Эти показатели помогают понять, насколько эффективно работает сервер и как на его производительность влияют различные элементы, такие как фермы, механизмы и скопления мобов.

##### Что такое FPS?

**FPS** (Frames Per Second) — количество кадров в секунду, которое зависит от конфигурации ПК и оборудования игрока. Этот параметр может значительно варьироваться в зависимости от мощности графической карты, процессора и других факторов на стороне клиента.

Стоит также отметить, что **FPS** на клиенте напрямую зависит от установленных модов и текстур паков. Особое влияние оказывают моды, добавляющие анимации, а также текстурпаки с высоким разрешением. Такие дополнения значительно увеличивают нагрузку на графический процессор и могут заметно снижать производительность, особенно на менее мощных системах.

##### Примеры и тесты из практики

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

<p class="callout warning">Эта информация основана на многолетних наблюдениях и опыте, накопленном за более чем четыре года игры и администрирования серверов. Хотя она может не быть абсолютно точной с технической точки зрения, эти выводы сделаны на основе реальных ситуаций, с которыми сталкиваются игроки и администраторы. Они помогают лучше понять, как различные аспекты игрового процесса влияют на производительность сервера и комфорт участников.</p>

##### Описание тестового стенда

Для проверки производительности и влияния различных механик на сервер использовался тестовый стенд. Он включает в себя следующую конфигурацию:

- **CPU**: AMD Ryzen 9 7950X (16/32, 4.5-5.7GHz)
- **Кулер**: Dark Rock Pro 4
- **Материнская плата**: MSI PRO B650-P WIFI
- **Оперативная память**: Kingston FURY 32 GB DDR5 6000 MHz Beast EXPO x2 (всего 64GB)
- **GPU**: GIGABYTE GeForce RTX 4070 WINDFORCE OC 12G
- **Блок питания**: ASUS ROG-STRIX-850G
- **Накопитель**: Samsung 980 PRO 500 GB
- **Дисплей**: LG UltraGear 32" (165Hz)
- **Система**: Windows 11 Pro 24H2

Настройки мира:

- **Minecraft**: 1.21.1
- **Мод-лоадер**: Fabric 0.16.9

Используемые моды:

- **carpet-extra-1.21-1.4.148** — Дополнение к основному моду
- **fabric-api-0.110.0+1.21.1** — API для загрузчика
- **fabric-carpet-1.21-1.4.147+v240613** — Основной мод для измерения нагрузок
- **sodium-fabric-0.6.0+mc1.21.1** — Базовая оптимизация
- **worldedit-mod-7.3.8** — Базовый мод для создания структур/ферм

Настройка Sodium:

![Sodium_settings_all.png](https://wiki.gmgame.ru/uploads/images/gallery/2024-12/scaled-1680-/sodium-settings-all.png)

Хотя тестовый стенд отличается от реальной конфигурации сервера, его основная цель — предоставить ориентировочные данные. Мы не стремимся к идеальной точности, а фокусируемся на получении приблизительных цифр, которые помогают оценить общее влияние игровых механик на TPS и MSPT. Это позволяет выявить ключевые проблемы и принять меры для оптимизации.

<p class="callout warning">Несмотря на то, что сервер работает на ядре Paper, а тесты проводятся на Fabric, полученные данные будут полезны. Fabric приближен к ванильной механике, а Paper включает множество оптимизаций. Учитывая эти нюансы, тестовый стенд все же позволит получить достаточно близкие к реальности результаты.</p>

<p class="callout warning">При проведении тестов будут оцениваться **FPS, TPS и MSPT**</p>

##### Создание мира

Мир был создан абсолютно ванильным образом с использованием стандартных настроек на первой и второй вкладке. Третья вкладка осталась без изменений.

![World_create_all.png](https://wiki.gmgame.ru/uploads/images/gallery/2024-12/scaled-1680-/world-create-all.png)

##### Первый взгляд

На первом взгляде, сразу после входа в мир, не будет никаких ферм, нагрузок или мобов. Это чистая, пустая игровая среда, которая позволяет нам увидеть начальное состояние мира без влияния каких-либо механик или построек, создающих дополнительную нагрузку на сервер.

![world.webp](https://wiki.gmgame.ru/uploads/images/gallery/2024-11/scaled-1680-/world.webp)

##### Основные команды

- `/profile health 7200` — carpet команда, которая позволяет мониторить состояние здоровья сервера на протяжении 7200 тиков.
- `/tick sprint 7200` — ванильная команда для активации ускорения времени, выполняемая на протяжении 7200 тиков, чтобы ускорить процесс тестирования.
- `/tick query` — ванильная команда, которая позволяет получить информацию о текущем состоянии тиков.

##### Дополнительные команды:

Для создания дополнительных виртуальных игроков

- `/tp 500 70 500` &amp; `/player Dalandis spawn in creative`
- `/tp -500 70 -500` &amp; `/player IronCAT_ spawn in creative`
- `/tp 500 70 -500` &amp; `/player SoftPanda3 spawn in creative`
- `/tp -500 70 500` &amp; `/player _BaXy_ spawn in creative`

Основной аккаунт для тестов и скриншотов — **prestig9110**, который будет находиться в точке `/tp 0 86 0`.

Режим **creative** используется только для того, чтобы игроки не были убиты мобами во время тестирования.

Для тестов, которые проводятся в воздухе, будет использоваться высота **270** блоков, в то время как для тестов на земле — высота **70** блоков.

##### Тест #1: Стандартная прогрузка с несколькими игроками

- Проверка нагрузки с 5 игроками на высоте 70 блоков. Игроки в разных точках.
- Результат составляет 14,1 MSTP

![test_1.1.png](https://wiki.gmgame.ru/uploads/images/gallery/2024-11/scaled-1680-/test-1.png)

- Проверка нагрузки с 5 игроками на высоте 270 блоков. Игроки в разных точках.
- Результат составляет 9,6 MSTP

![test_1.2.png](https://wiki.gmgame.ru/uploads/images/gallery/2024-11/scaled-1680-/test-1-2.png)

- Проверка нагрузки с 5 игроками на высоте 270 блоков. Все игроки в одной точке.
- Результат составляет 1,7 MSTP

![test_1.3.png](https://wiki.gmgame.ru/uploads/images/gallery/2024-11/scaled-1680-/test-1-3.png)

- Проверка нагрузки с 5 игроками на высоте 270 блоков. Все игроки в одной точке.
- Результат составляет 1,4 MSTP

![test_1.4.png](https://wiki.gmgame.ru/uploads/images/gallery/2024-11/scaled-1680-/test-1-4.png)

Нагрузка на сервер зависит от расстояния между игроками и их положения. Когда игроки находятся далеко друг от друга, каждый из них загружает в среднем 70 враждебных мобов и +-30/35 мирных мобов, что суммарно для 5 игроков даёт 350 враждебных и +-175 мирных мобов. Если все игроки находятся в одной точке, количество загружаемых мобов делится между ними, и сервер грузит только одно количество мобов на всех, например, +-70 враждебных мобов на 5 игроков.

Аналогичная ситуация возникает и с чанками. При радиусе симуляции в 8 чанков, для одного игрока серверу нужно обработать 256 чанков. Если игроки распределены по разным точкам, то обрабатывается 256 \* 5 = 1280 чанков. Однако если все игроки находятся в одной точке, они используют одни и те же чанки, и серверу нужно обработать только 256-280 чанков, так как они не могут точно стоять в одной точке.

Если игроки находятся в воздухе, это также влияет на нагрузку. В воздухе меньше блоков, с которых могут появляться мобы, и так как вокруг в 80% пустота, нагрузка на сервер снижается. В отличие от земли, где мобы могут спауниться в большем количестве, в воздухе их количество ограничено. Таким образом, небольшим плюсом является строительство в воздухе или выкапывание большой ямы (например, 256x256), что снижает нагрузку на сервер.

В данном примере нет смысла акцентировать внимание на **FPS**, так как основная нагрузка идёт на сервер.

##### Тест #2: сундуки

- Проверка нагрузки с 5 игроками на высоте 70 блоков. Игроки в разных точках. 8192 каждый
- Результат составляет 14,1 MSTP

#####   
  