Туториал Оптимизация SPIGOT - убираем лаги, стабилизируем TPS и повышаем производительность!

Статус
В этой теме нельзя размещать новые ответы.

Hidens

Администратор
Команда форума
Disclaimer:
  • Я не оказываю помощи в настройке и оптимизации серверов.
  • Все изменения вы делаете на свой страх и риск.
  • Данная статья является конечной в оптимизации сервера, если вы имеете нестабильную сборку, в конфиги ядра лезть бессмысленно.
  • Тема является сборной солянкой общедоступной на US форумах информации.
  • Да пребудет с вами сила
Оптимизация сервера

Вот подробное руководство по оптимизации вашего сервера!
Имейте в виду, для оптимизации и стабилизации сервера стоит использовать инструмент Spigot Timings собирая статистику при максимальной нагрузке на сервер.

Информацию для статьи взял с форума Spigot и Rubukkit


1. PaperSpigot & paper.yml
PaperSpigot представляет собой набор патчей для ядра Spigot которые существенно оптимизирует сервер и добавляет дополнительные настройки с помощью файла paper.yml.

Запустите paperspigot.jar, как вы это делаете с обычным ядром spigot.jar (собственно PaperSpigot и является ядром сервера) .
После запуска, сервера сгенерирует в корневой папке три yaml файла:
  • spigot.yml
  • paper.yml
  • bukkit.yml
Используя эти файлы мы и будем вести настройку.

Для начала откройте paper.yml:

Следует снизить параметр despawn-ranges, если у вас слишком много мобов (в противном случае оставьте это по умолчанию).

Измените значение на true следующих параметров:

use-async-lighting
optimize-draining


Это позволит оптимизировать параметры потока жидкости и обрабатывать освещение асинхронно.

Примечание: Некоторые из этих параметров были вырезаны в paperspigot, в более поздних версиях и больше не настраиваются в конфигурационном файле (как они всегда активированы).


Если у вас на сервере совершается много действий с redstone схемами, воронками, вагонетками... еtс , снижение параметра tick-next-tick-list-cap может помочь в повышении производительности.



2. Spigot.yml & Bukkit.yml

Spigot.yml & bukkit.yml являются файлами, которые генерирует сервер Bukkit/Spigot умолчанию. Они позволяют нам настроить такие параметры как: лимит сущностей(entity), кол-во сущностей(entity) за тик, обработку мира и другое.

Откройте spigot.yml. Здесь мы сможем выжать максимум производительности из сервера. Найдите раздел "world-settings".

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

Параметр: nerf-spawner-mobs может быть установлен на true, если ваш сервер не полагаться на агрессивных мобов, которые появляются с помощью спаунеров. Если у вас есть много спаунеров нейтральных мобов (фермы и тд) и вы редко используете спаунеры агрессивных, активация этой функции даст серьезное увеличение производительности.

entity-activation-range
Стандартные значения:(animals: 32, monsters: 32, misc: 16)
Описание: Устанавливает радиус в блоках, в пределах которых сущности будут "активными" - объекты за пределами этого диапазона будет тикать по сниженному рейту, чтобы предотвратить сервера отставание.
Я предлагаю использовать такие параметры:
Код:
entity-activation-range:
animals: 8
monsters: 10
misc: 2
Misc регулирует радиус элементов рам, картин, выброшенных предметов, шаров опыта и табличек. Я установил этому параметру значение "2", для предотвращения их движения по воде. Параметры animals: 8 monsters: 10 не означают что мобы будут выгружены, они будут активны(за один тик), но с более низким рейтом (читаем подробнее, что такое тик).

entity-tracking-range
Стандартные значения:(players: 48, animals: 48, monsters: 48, misc: 32, other: 64)

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

entity-tracking-range: не влияет на производительность сервера, но влияет производительность на стороне клиента. Я хотел бы предложить оставить его нетронутым.
Код:
entity-tracking-range:
players: 48
animals: 48
monsters: 48
misc: 32
other: 64
ticks-per:
↳ hopper-transfer

Стандартное значение: 8
Описание: Период времени в 1 тик, между тем как воронка активируется и перетянет вещи в сундук. При стандартном значении воронка активируется и перетаскивает в сундук предметы раз в 8 тиков.

↳ hopper-check (Удалено в версии 1.8.3 March, 8th 2015)
Стандартное значение:
8
Описание: Период времени в 1 тик, - за который воронка анализирует кол-во предметов вокруг нее. К примеру при значении 8, воронка будет проверять инвентарь сундука и наличие предметов вокруг нее раз в восемь тиков.

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

Я советую установить вот такие значения:
Код:
ticks-per:
hopper-transfer: 24
hopper-check: 24
hopper-amount: 3
max-entity-collisions
Стандартное значение: 8
Описание: Данный параметр устанавливает лимит сущностей в одной точке, я предлагаю установить значение 2 или даже 1.

item-despawn-rate
Стандартное значение: 6000
Описание:Данный параметр устанавливает время в тиках, по прошествии которого брошенные на землю предметы исчезнут.

При стандартном значении предметы будут исчезать через 6000:20=300 секунд. Данный параметр регулируется индивидуально для каждого сервера.

merge-radius:
↳ exp

Стандартное значение: 3.0
Описание: Устанавливает радиус в блоках, когда шарики опыта будут объединены в один стак.

↳ item
Стандартное значение: 2.5
Описание: Устанавливает радиус в блоках, когда предметы одной группы будут объединены в один стак.

Предлагаю вот такие параметры:
Код:
merge-radius:
item: 4
exp: 6
view-distance
Стандартное значение: 10
Описание:Контролирует количество блоков, которые будут загружены вокруг каждого игрока. Это значение не может быть выше , чем 15 или ниже , чем 1. Понижение это может снизить нагрузку на сервер , если у вас есть большое количество игроков онлайн.

Я советую установить данный параметр на "4", но в таком случае могут возникнуть проблемы при прогрузке блоков для креатив серверов. Все же лучше не выходить за значение "6". Данный параметр оказывает значительную нагрузку на сервер



chunks-per-tick
Стандартное значение: 650
Описание:Контролирует количество чанков, которые будут обновлены для роста культур(фермерам на заметку) за один тик . Снижение этого параметра уменьшает нагрузку на сервер и замедляет рост культур соответственно. Я предлагаю установить значение "80" что примерно в восемь раз ниже.

growth:
x-модификатор
где x это = cactus, melon, pumpkin, sapling, cane, mushroom, wheat

Стандартное значение: 100
Type: Integer
Описание: Контролирует скорость роста определенной культуры.
При снижении параметра chunks-per-tick в восемь раз до 80, мы увеличим значения роста каждой культуры до "800" ( восемь раз соответственно) что даст нам стандартную скорость роста, при этом сократив кол-во обновленных чанков.

Устанавливаем параметры на:
Код:
growth:
cactus-modifier: 800
cane-modifier: 800
melon-modifier: 800
mushroom-modifier: 800
pumpkin-modifier: 800
sapling-modifier: 800
wheat-modifier: 800
Помните, что параметры chunks-per-tick и growth взаимосвязаны и если вы уменьшили кол-во обновленных чанков, при этом оставив без изменения параметр growth(100) то вы снизите скорость роста в восемь раз и наоборот.



Переходим к файлу bukkit.yml

Параметр spawn-limits. Отвечает за общее кол-во мобов, которые будут отспаунены для одного игрока. Я предлагаю такие значения:
Код:
spawn-limits:
monsters: 50
animals: 10
water-animals: 3
ambient: 4
Я снизил параметр ambient: 4, тк. Кол-во летучишь мышей никак не влияет на геймплей.
Чем больше игроков играют на сервере, тем ниже можно опускать данные значения повышая при этом производительность сервера.

Также рекомендую установить значения параметра ticks-per:
Код:
ticks-per:
animal-spawns:400
monster-spawns: 3
autosave: 3000
В частности, я изменил monster-spawns с 1 до 3. Это интервал между событием mobSpawn , который будет определять места и порождать монстров . Если mobSpawn собирает много циклов в ваших таймингах советую увеличить данные значения!

chunk-gc это небольшая функция spigot которая отключена по умолчанию. Для включения, установите параметры:
Код:
chunk-gc:
period-in-ticks: 300
load-threshold: 300
Java и скрипт запуска
Данный скрипт написан придерживаясь последней версии Java, если вы по какой то причине используете 7 (-) версию, добавьте к скрипту запуска параметр XX:MaxPermSize=128M .

Актуальность скрипта является постоянной темой для споров. Одни говорят о несущественном увеличении производительности, другие докладывают а невероятном приросте после внесения овердохрена флагов. Мнений много, но все же я собрал простой скрипт запуска, использовать его или нет дело ваше.
Код:
java -Xmx8G -Xms8G -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:MaxGCPauseMillis=50 -XX:TargetSurvivorRatio=90 -XX:G1NewSizePercent=50 -XX:G1MaxNewSizePercent=80 -XX:InitiatingHeapOccupancyPercent=10 -XX:G1MixedGCLiveThresholdPercent=50 -XX:+AggressiveOpts -jar имя_ядра.jar

Код:
-Xmx<n>G
<n> = Максимальное значение выделенной памяти для сервера MineCraft. (Никогда не устанавливайте максимально доступный параметр, оставляйте ресурс для работы вашей системы.
-Xms<n>G
<n> =
Память, выделенная для старта сервера в гигабайтах.
Этот параметр устанавливает объем памяти, который будет выделен(занят) при старте игрового сервера. При использовании G1 сборщика мусора (а мы используем в этом скрипте именно его), параметр должен быть таким же что и Xmx.

-XX:+AlwaysPreTouch
Это говорит Java, как распределить объем памяти, которую мы задали параметром Xmx, и заполнить ее нулями, так что правильно инициализировать (экономия ресурса процессора в первые пару часов жизни сервера)

-XX:+DisableExplicitGC
Это отключает вызов GC плагинами. Мы используем собственный GC, так что давайте его отключим.

-XX:UseG1GC
Этот параметр активирует сборщик мусораG1. По умолчанию сборщик мусора не предназначены для постоянной работы. Например, веб-сервер не будет иметь никаких проблем при задержке каждые 200 мс между запросами, чтобы сделать сбор мусора. А Minecraft сервер постоянно выполняет работу. К счастью, специально для таких случаев существует G1GC. Тем не менее, мы можем настроить GC более тонко, используя некоторые флаги (которые находятся в скрипте после активации G1GC). Я советую прочитать пост Aikar's для правильного понимания того, как они работают.
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху

Дорогой пользователь

Мы зафиксировали включенный AddBlock в вашем

браузере! Для продолжения использования форума, выключите

адд-блок - реклама это единственное средство с которого данный форум

окупается, спасибо за понимание!