August 30

Как оптимизировать сервер? Подробный гайд!

Многие при создании серверов, сталкивались с проблемой высокого потребления ОЗУ и CPU, в этой статье подробно описано, как снизить это потребление, почти не теряя функционал и комфорт игроков!


Выбор ядра сервера.

Выбор ядра сервера очень важный аспект при создании, и от себя хотел бы порекомендовать три ядра!

  1. PurPur --> Одно из самых популярных вариантов, очень гибкое и оптимизированное ядро!
  2. Paper --> Так же популярное ядро, имеет более простую конфигурацию, и подойдет для начинающих серверов и создателей, так же хорошо оптимизированное.
  3. Patina --> Относительно новое ядро, не столь популярное как вышеперечисленные, но если хотите попробовать что-то новенькое, то стоит поставить это ядро!

Плагины

Плагины, основа того, от чего будет зависеть нагрузка на ваш сервер, сколько он будет занимать RAM, и использовать CPU, в списке ниже я приведу примеры плагинов которые стоит использовать и те плагины которые лучше обходить стороной.

Хорошие плагины

  1. Chunky - Плагин для прогрузки чанков на карте, хоть он и не совсем относится к снижению потребления ОЗУ, но на него в том числе влияет, плагин позволяет прогружать чанки мира заранее, что значительно снижает потребление CPU, и частично потребление ОЗУ.
  2. Spark - Плагин позволяющий отслеживать состояние сервера постоянно! Позволяет диагностировать ошибки с производительностью, памятью и смотреть что больше всего нагружает сервер, количество мобов, и многое другое, наш гайд по плагину Spark.

Плохие плагины

  1. CoreProtect - Сам плагин хороший, логирует все действия игроков, позволяет откатить действия игроков, и так далее, но этим логированием довольно неплохо нагружает сервер, если в нем нет сильной необходимости, то советую его удалить.
  2. PlugManX - Плагин так же хороший, радует своим функционалом, позволяя запускать плагины не перезагружая сервер, выключать их, перезапускать, но это имеет плохие последствия, плагины при такой перезагрузке могут выдать фатальную ошибку, повредиться, и вовсе не сохранить некоторые данные. (К этому же плагину относиться команда /reload)
  3. AutoSaveWorld - Ненужный плагин, как и все его аналоги, и не имеет в себе какого то особого функционала, так как эта функция встроена в ядро сервера, в файле bukkit.yml
  4. HideStream - Плагин который отключает сообщения о смерти, входе/выходе игрока, о сообщении при кике игрока, не имеет в себе смысла, лишь ест лишние ресурсы сервера, все это можно настроить в файлах сервера.
  5. Так же хочу добавить пару советов, не используйте плагины от разных студий, которые предлагают функционал по типу "Кейсы как на фантайме!", "Мистики как на фантайме", в основном они написаны не качественно, из-за чего могут вызывать ошибки, и оптимизации там так же нет, не говоря уже о вредоносном коде который может быть в подобных плагинах.

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


Оптимизация ядра и его конфигураций

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

server.properties


  • Наименьшее значение означает большее сжатие трафика и увеличение нагрузки на процессор, но положительно сказывается на игроках с плохим интернетом.
network-compression-threshold=128/256/512
  • Рекомендуемое значение от 4 до 8, отталкиваясь от характеристик сервера.
view-distance=6
  • Абсолютно ненужная функция, хоть и не влияет на ресурсы, но лучше отключить, так как может вызывать ошибку у плагина WorldEdit и WorldGuard при затрагивании защищённой территории.
spawn-protection=0

spigot.yml


  • Радиусы в блоках, в которых одинаковые предметы/опыт будут соединяться в одну кучу.
merge-radius:
      exp: 5.75
      item: 3.5
  • Радиус в чанках от игрока, в котором будут спавнится мобы.
mob-spawn-range: 3-4
  • Увеличивает время для проверки сервером, декоративных сущностей по типу — арморстендов, картин, рамок и так далее. (При большем значении может вызвать небольшие визуальные баги)
hanging-tick-frequency: 100/150/200/250
  • Сохраняет данные о игроках, только при остановке сервера.
save-user-cache-on-stop-only: true
  • Время через которое будут удаляться стрелы, выпущенные игроком (в тиках)
arrow-despawn-rate: 300
  • Время через которое будет удаляться трезубец, кинутый игроком (в тиках)
trident-despawn-rate: 600
  • Полная настройка воронок на сервере, нужное значение зависит от количества игроков и воронок на сервере.
hopper-amount: 3-9
hopper-transfer: 8-24
hopper-check: 8-24
  • Убирает ИИ у мобов которые спавнятся с спавнеров, очень полезно для серверов где используются фармилки, фермы, спавнера.
nerf-spawner-mobs: true
  • Выключает бессмысленное логирование смертей жителей.
log-villager-deaths: false
  • Выключает бессмысленное логирование названных сущностей (биркой)
log-named-deaths: false
  • Ограничивает максимальное количество взрывов динамита на тик.
    (Устанавливайте нужное вам число в зависимости от типа сервера)
max-tnt-per-tick: 10-50
  • Эти параметры определяют максимальное время обработки для тайлов и сущностей в тиках.
max-tick-time:
tile: 8
entity: 16

bukkit.yml


  • Отключает возможность узнать плагины сервера через сторонние ресурсы.
query-plugins: false
  • Время, через которое сервер выгрузит неактивный чанк из памяти (в тиках)
period-in-ticks: 300
  • Автоматическое сохранение данных сервера (в тиках)
    Если сервер работает нестабильно, лучше не трогать.
autosave: 6000/16000
  • Время в тиках, через которое сервер будет спавнить определённую группу существ.
    Если нужен более ванильный геймплей - ставьте первые числа,
    Если нужно больше производительности - вторые.
ticks-per:
animal-spawns: 400/420
monster-spawn: 10/12
water-spawns: 600/800
axolotl-spawns: 400/600
water-ambient-ambient: 600/800
water-underground-creature-spawns: 400/600
ambient-spawns: 1800/2200
  • Означает лимит спавна определенной группы сущностей
spawn-limits:
monsters: 20 # Враждебные мобы.
animals: 8 # Мирные мобы.
water-animals: 3 # Водные существа (спруты, дельфины)
water-ambient: 1 # Мелкие рыбы
axolotls: 3 # Аксолотли
water-underground-creature: 3 # Подземные спруты
ambient: 1 # Летучие мыши

purpur.yml


  • Позитивно влияет на игроков с плохим интернетом, оттягивая время их кика из-за плохого подключения. (Несовместимо с TCPShield)
use-alternate-keepalive: true
  • Сокращает отправку бесполезных пакетов сущностей.
dont-send-useless-entity-packets: true
  • Присоединение игроков будет отложено во времени, чтобы сервер мог правильно отмечать их обработку.
max-joins-per-second: true
  • Увеличивает в два раза ванильный откат размножения животных.
breeding-delay-ticks: 12000
  • Исправляет ошибку MC-3304.
fix-projectile-looting-transfer: true
  • Выключает обновление нотных блоков, грибов, хорусов.
    Лучше не трогать, если сервер больше склонен к ванильной игре
    (Рекомендуется к отключению разработчиком LoneDev при использовании ItemsAdder)
disable-mushroom-updates: true
disable-note-block-updates: true
disable-chorus-plant-updates: true
  • Команда /give не будет выбрасывать предметы из инвентаря если он переполнен.
disable-give-dropping: true
  • Не позволяет игроку застрять в портале-ловушке, через время телепортируя его обратно.
fix-stuck-in-portal: true
  • Выключает падение предметов из сущностей которые умирают от удушения.
    Будет полезно, если игроки строят слишком много ферм, работающих таким образом.
disable-drops-on-cramming-death: true
  • При любом движении уже приземлившейся стрелы, её таймер
    на исчезновение не будет обновляться. (Фиксит некоторые лаг-машины)
arrow:movement-resets-despawn-counter: false
  • Игрок будет бессмертен пока устанавливает серверный ресурспак.
invulnerable-while-accepting-resource-pack: true
  • Игроки смогут лечь на кровать даже рядом с агрессивными мобами.
sleep-ignore-nearby-mobs: true
  • Данная настройка запретит сущностям использовать порталы.
    То-есть игроки не смогут сделать загрузчик чанков.
    Не рекомендуется, если игрокам нужно перемещать мобов через миры.
entities-can-use-portals: false
  • Сильно помогает очистить консоль от бессмысленного текста.
logger:
    suppress-init-legacy-material-errors: true
    suppress-ignored-advancement-warnings: true
    suppress-unrecognized-recipe-errors: true
    suppress-setblock-in-far-chunk-errors: true
    suppress-library-loader: true
  • По сути, отключает возможность сделать лаг-машины на движущихся стойках для брони. (Читайте текст после # )
armorstand:
  step-height: 0.0 # высота ^прыжка^ стойки, может быть полезно для сторонних плагинов (например на транспорт)
  set-name-visible-when-placing-with-custom-name: true # имя переименнованой стойки будет видно при установке
  fix-nametags: true # позволяет переименовывать стойки с помощью бирки
  can-movement-tick: false # запрещает стойкам двигаться
  can-move-in-water: false # запрещает стойкам двигаться по воде
  can-move-in-water-over-fence: false # запрещает стойкам двигаться по воде через заборы
  place-with-arms-visible: true # стойки будут ставиться с видимыми руками
  • Дельфины не будут искать сокровища. (Хорошая оптимизация дельфинов)
dolphin:
  disable-treasure-searching: true
  • Настройка снежных големов.
snow_golem:
  leave-trail-when-ridden: false #Снежные големы не будут оставлять за собой след снега.
  min-shoot-interval-ticks: 300 #Снежные големы будут стрелять раз в 10 секунд, вместо раза в секунду.
  max-shoot-interval-ticks: 300
  • Спруты будут подчиняться параметрам entity_activation_range из spigot.yml.
squid:
  immune-to-EAR: false
  • Пауки не смогут лазать по границе мира.
spider:
  can-climb-world-border: false
  • Настройка жителей. (Читайте текст после # )
villager:
  brain-ticks: 32
  use-brain-ticks-only-when-lagging: true # Житель будет активничать только раз в 32 тика при значении ТПС ниже чем в lagging-threshold.
  breeding-delay-ticks: 12000
  allow-trading: true # Если значение false то жители не будут торговать с игроком.
  lobotomize:
    enabled: true
    check-interval: 100
  display-trade-item: false # Отключает отображение предмета для продажи. Оптимизация.
  spawn-iron-golem: # Лимит количественного спавна железных големов на определенный радиус.
    radius: 5
    limit: 5
  • Настройка скорости исцеления зомби-жителя.
    Ради удобства игроков и меньшего удержания агрессивного моба в памяти сервера.
zombie_villager:
  curing_time:
    min: 1300
    max: 3000
  cure:
    enabled: true #Если значение false - выключает возможность исцелить зомби-жителя.
  • Зомби не будут агрессировать на жителей при значении ТПС ниже, чем указано в lagging-threshold.
zombie:
  aggressive-towards-villager-when-lagging: false

pufferfish.yml


Хочу отметить что настройки pufferfish.yml являются достаточно сбалансированными, и оптимизированными, не стоит их менять если нет проблем с производительностью!


  • Устанавливаем максимальное время жизни для некоторых сущностей.
    Может помочь избежать лаг-машин на снежках и яйцах.
entity_timeouts:
  SNOWBALL: 200
  EGG: 200
  LLAMA_SPIT: 40
  FIREBALL: 100
  DRAGON_FIREBALL: 100
  • Указывает, сколько любой снаряд может загрузить чанков за время своего существования.
    Полезно, но может вызывать застревающие в чанках трезубцы, стрелы и тому подобное.
max-loads-per-projectile: 4-6
  • Указывает насколько далеко сущность должна находится от игрока, чтобы DAB начал работать. (DAB простыми словами - оптимизация жителей)
start-distance: 6-8
  • Указывает раз в сколько тиков будут обновляться самые дальние от игрока сущности.
    Негативно сказывается на различных фермах.
max-tick-freq: 35-40
  • Указывает насколько расстояние влияет на тик сущностей.
activation-dist-mod: 7

paper-global.yml


  • Выключает автоматический сбор таймингов после старта сервера.
    Используйте Spark для поиска проблем с производительностью.
    В новых версиях ядра Purpur функция удалена.
timings:
  enabled: false
  verbose: false
  • Позволяет отображать цвета в консоли сервера.
use-rgb-for-named-text-colors: false
  • Ограничивает максимальное количество захода игроков до одного в один тик.
max-joins-per-tick: 1
  • Исправляет баг MC-4 связанный с синхронизацией лежащих предметов у игрока и сервера.
fix-entity-position-desync: true
  • Должны ли фантомы, странствующие торговцы и т. д. появляться в пользовательских мирах. По умолчанию false, что-бы соответствовать поведению Vanilla
use-dimension-type-for-custom-spawners: true
  • Использовать альтернативную формулу удачи, позволяющую применять удачу к предметам, не имеющим определенного качества. Вносит существенные изменения в формулы рыбалки. (На свое усмотрение)
use-alternative-luck-formula: true
  • Настройка новой системы чанков (1.19.2)
    Намного быстрее старой системы! (Читайте описание после # )
chunk-system:
gen-parallelism: default
io-threads: -1 # Значение -1 означает что сервер будет потреблять половину доступных ресурсов
worker-threads: -1 # Укажите количество доступных вашему серверу ядер процессора (как минимум одно ядро оставляйте свободным для системы)

paper-world-defaults.yml


  • Расстояние в блоках от игрока в которых ненужные сущности будут пропадать.
despawn-ranges:
      ambient:
        hard: 56
        soft: 30
      axolotls:
        hard: 56
        soft: 30
      creature:
        hard: 56
        soft: 30
      misc:
        hard: 56
        soft: 30
      monster:
        hard: 56
        soft: 30
      underground_water_creature:
        hard: 56
        soft: 30
      water_ambient:
        hard: 56
        soft: 30
      water_creature:
        hard: 56
        soft: 30
  • Делает попугаев "липкими", что-бы они не падали с плеча игрока, когда он движется. Используйте приседание что-бы стряхнуть их
parrots-are-unaffected-by-player-movement: true
  • Количество курсоров (маркеров), разрешенных на карту. Большое количество курсоров может использоваться для задержки клиентов
item-frame-cursor-limit: 64
  • Задерживает выгрузку чанка на указанное время. Форматируется как длительность с одной единицей, например 10 ч или 25 мин.
    Поддерживает d, h, m, s.
delay-chunk-unloads-by: 7s
  • Зомби не будут агрессировать на яйца черепах.
    Убивает все фермы которые используют эту механику!
zombies-target-turtle-eggs: false
  • Отображение игрока на карте будет обновляться реже.
    Установка этого числа меньше 1 отключит обновления вообще.
item-frame-cursor-update-interval: 20
  • Выключает показ финальных титров игроку.
disable-end-credits: true
  • Исправляет возможность предметам стакаться через стены.
fix-items-merging-through-walls: true
  • Выключаем постоянную прогрузку чанков спавна.
keep-spawn-loaded: false
  • Время в тиках, раз в которое спавнер будет спавнить сущностей.
mob-spawner: 4-8
  • Выключает котам возможность искать сундуки. Оптимизация!
disable-chest-cat-detection: true
  • Дает указание серверу игнорировать скорость стрелка при расчете скорости выпущенной стрелы.
disable-relative-projectile-velocity: true
  • Запрещает игроку быстро грузить не прогруженные чанки,
    телепортируя его назад пока чанк не будет прогружен.
prevent-moving-into-unloaded-chunks: true
  • Управляет обновлением поиска пути мобов при обновлении блока в мире. Отключение этой опции может значительно повысить производительность сервера, при этом практически не оказав заметного влияния на игровую механику. Рекомендуется, когда загружено много сущностей, и у вас есть автоматизированные фермы или часы из красного камня.
update-pathfinding-on-block-update: false
  • Дает указание серверу кэшировать поиски сущностей во время взрыва, а не пересчитывать их в течение всего процесса.
    Это значительно ускоряет взрывы.
optimize-explosions: true
  • Влияет на скорость удаления стрел игроков в креативе и мобов. (В тиках)
non-player-arrow-despawn-rate: 5
creative-arrow-despawn-rate: 5

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