Вступление
Невозможно создать руководство, которое обеспечит идеальные результаты для всех. Каждый сервер имеет свои уникальные потребности и ограничения, касающиеся того, чем вы можете или готовы пожертвовать. Именно в этом заключается суть настройки параметров для оптимизации под нужды вашего сервера. Цель этого руководства — помочь вам понять, какие параметры влияют на производительность и что конкретно они изменяют. Если вам кажется, что вы обнаружили неточную информацию в данном руководстве, вы можете создать запрос на исправление.
Выбор ядра сервера
Выбор серверного программного обеспечения может значительно повлиять на производительность и возможности API. На сегодняшний день существует несколько популярных и жизнеспособных серверных JAR-файлов, но также есть и такие, от использования которых лучше воздержаться по различным причинам.
Рекомендуемые оптимальные варианты:
- Paper — самое популярное серверное программное обеспечение, созданное для повышения производительности и устранения несоответствий в игровом процессе и механике.
- Pufferfish — форк Paper, ориентированный на дальнейшее улучшение производительности сервера.
- Purpur — вилка Pufferfish, сосредоточенная на функциональности и гибкости настройки.
Следует избегать:
- Любого платного серверного JAR-файла, который утверждает о асинхронности каких-либо процессов, так как вероятность мошенничества составляет 99,99%.
- Bukkit/CraftBukkit/Spigot — эти решения сильно устарели по сравнению с другими доступными вариантами в плане производительности.
- Любых плагинов или программного обеспечения, которые могут включать, отключать или перезагружать плагины во время работы. Подробности об этом можно найти в соответствующем разделе.
- Многие форки, находящиеся ниже Pufferfish или Purpur, могут столкнуться с нестабильностью и другими проблемами. Если вы ищете дополнительное повышение производительности, лучше оптимизировать свой сервер или инвестировать в собственный частный форк.
Важно для пользователей, использующих ванильную версию, Fabric или Spigot (или любую версию ниже Paper) — откройте файл server.properties и установите значение sync-chunk-writes на false. Эта опция автоматически устанавливается на false в Paper и его производных, однако в других реализациях серверов вам нужно изменить её вручную. Это позволит серверу сохранять чанки вне основного потока, что уменьшит нагрузку на основной цикл тиков.
Оптимизация с помощью рендера карты
Вы можете предварительно сгенерировать мир, используя плагин, такой как Chunky. Не забудьте установить границу мира, чтобы ваши игроки не создавали новые чанки! Имейте в виду, что процесс генерации может занять несколько часов в зависимости от радиуса, указанного в команде.
Оптимизация с помощью настройки конфигурационных файлов
Файл server.properties
Найдите в этом файле параметр `network-compression-threshold` и установите значение 256, если указано другое.
Это позволит вам определить предел для размера пакета перед тем, как сервер начнет его сжатие. Увеличение этого значения может помочь сэкономить ресурсы ЦП за счет уменьшения нагрузки на пропускную способность, в то время как установка значения -1 отключает сжатие. Тем не менее, увеличение лимита может negatively сказаться на клиентах с медленными сетевыми соединениями. Если ваш сервер находится в сети с прокси-сервером или работает на той же машине (пинг менее 2 мс), отключение этой функции (-1) может быть полезным, так как внутренних скоростей сети обычно хватает для обработки увеличенного объема несжатого трафика.
Найдите в этом файле параметр `simulation-distance` и установите значение 4, если указано другое.
Расстояние моделирования — это максимальное расстояние в чанках вокруг игрока, на котором сервер будет обрабатывать события. Это включает такие действия, как плавка в печах, выращивание урожая, рост саженцев и т. д. Рекомендуется устанавливать это значение довольно низким, примерно на уровне 3 или 4, из-за настройки view-distance. Такое сочетание позволяет загружать больше чанков без необходимости отслеживать их активность, что фактически позволяет игрокам видеть дальше, не оказывая такого же воздействия на производительность сервера.
Файл purpur.yml
Найдите в этом файле параметр `use-alternate-keepalive` и установите значение true, если указано другое.
Это активирует альтернативную систему поддержки активности Purpur, чтобы игроки с нестабильным соединением не сталкивались с частыми тайм-аутами. Обратите внимание, что этот параметр имеет известную несовместимость с TCPShield.
При включении этого параметра сервер будет отправлять пакет keepalive игроку каждую секунду и вызывать тайм-аут только если не будет получен ответ на ни один из них в течение 30 секунд. Ответ на любой из этих пакетов, независимо от порядка, сохранит игрока в сети. Это означает, что ваши игроки не будут отключены из-за потери одного пакета в процессе передачи данных.
Измените значение параметра 'zombie.aggressive-towards-villager-when-lagging' на false, если указано иное.
Включение этого параметра приведет к тому, что зомби перестанут атаковать деревенских жителей, если производительность сервера упадет ниже порогового значения TPS, установленного с помощью параметра `lagging-threshold` в файле `purpur.yml`. Это может помочь уменьшить нагрузку на сервер и предотвратить дополнительные проблемы при низкой производительности, сохраняя жизнь NPC в таких условиях.
Измените значение параметра `entities-can-use-portals` на false, если указано другое.
Эта позволит отключить использование порталов для всех сущностей, кроме игроков. Это также предотвращает загрузку чанков сущностями, которые меняют мир, что обрабатывается в основном потоке. Следствием этого является то, что сущности не смогут проходить через порталы. Это может быть полезно для оптимизации производительности сервера, особенно в ситуациях с высокой загрузкой, однако стоит учитывать, что это также ограничит возможности NPC и мобов перемещаться между мирами.
Измените значение параметра `villager.lobotomize.enabled` на true, если указано другое.
Эту опцию следует включать только в том случае, если деревенские жители действительно вызывают задержки на сервере. В противном случае проверки на пути могут снизить производительность.
Настройте значения параметров
villager.search-radius
acquire-poi: 16
nearest-bed-sensor: 16
Эти параметры определяет радиус, в пределах которого деревенские жители будут искать блоки рабочих мест и кровати. Установка ограниченного радиуса значительно улучшает производительность на серверах с большим количеством жителей, так как уменьшает нагрузку на процесс обработки их ИИ. Однако это также означает, что жители не смогут обнаруживать блоки рабочих мест или кровати, находящиеся дальше установленного значения. Поэтому важно найти баланс между производительностью и функциональностью жителей, особенно в крупных деревнях или на серверах с большим количеством игроков.
Измените значение параметра `dolphin.disable-treasure-searching` на true, если указано другое.
Эта опция предотвращает дельфинов от выполнения поиска структур, аналогичного тому, что происходит при использовании сокровищниц с картами сокровищ. Отключение этой функции может помочь снизить нагрузку на сервер, особенно если много дельфинов взаимодействуют с игровым миром, что может вызывать дополнительные проверки и вычисления. Хотя это может повлиять на игровую механику, связанную с дельфинами, это может быть полезным решением для оптимизации производительности в больших мирах или на серверах с высокой загрузкой.
Измените значение параметра `teleport-if-outside-border` на true, если указано другое.
Эта опция позволяет телепортировать игрока к точке спауна мира, если он оказывается за пределами границ мира. Это может быть полезной функцией, так как стандартная граница мира в Minecraft может быть обойдена, что может привести к получению урона игроком. Активируя эту опцию, вы можете уменьшить последствия за пределами границы и предотвратить неприятные ситуации, связанные с потерей здоровья или подхемным падением в пустоту. Это особенно актуально на серверах с ограничениями и правилами, направленными на улучшение игрового опыта.
Файл spigot.yml
Измените значение параметра `view-distance` на default, если указано другое.
Это значение заменяет параметр в файле server.properties, если оно не установлено на значение по умолчанию. Рекомендуется оставить его на уровне по умолчанию, чтобы объединить параметры симуляции и расстояния видимости в одном месте, что упростит управление ними. Это позволяет легче настраивать производительность сервера и оптимизировать игровой процесс, так как оба параметра будут синхронизированы и управляемы из одного места.
Файл paper-world.yml
Измените значение параметра `delay-chunk-unloads-by` на 10s, если указано другое.
Эта опция позволяет настроить, как долго чанки будут оставаться загруженными после того, как игрок покинет мир. Это помогает избежать постоянной загрузки и выгрузки одних и тех же чанков, когда игрок перемещается взад-вперед. Если значение будет слишком высоким, это может привести к тому, что слишком много чанков будет загружено одновременно, что может негативно сказаться на производительности сервера.
В зонах, куда часто телепортируются и загружаются чанки, стоит рассмотреть возможность их постоянной загрузки. Это будет более легким вариантом для вашего сервера, чем постоянная загрузка и выгрузка чанков, обеспечивая более стабильную работу и меньшее количество разрывов в игре для игроков. Оптимальное использование этой зависимости может значительно улучшить игровой опыт на сервере.
Измените значение параметра `max-auto-save-chunks-per-tick` на 8, если указано другое.
Эта опция позволяет замедлить процесс инкрементального сохранения мира, распределяя задачу во времени, что способствует улучшению средней производительности сервера. Рекомендуется установить значение выше 8, если на сервере одновременно находится более 20-30 игроков. Это помогает избежать ситуаций, когда процесс сохранения не успевает завершиться, что может привести к потере данных или ухудшению производительности.<br/><br/>Если инкрементальное сохранение не завершится вовремя, Bukkit автоматически сохранит остаточные чанки за раз и начнет процесс заново. Таким образом, правильная настройка данного параметра позволит улучшить стабильность работы сервера и сделать игровой процесс более плавным для всех игроков.
Измените значение параметра `prevent-moving-into-unloaded-chunks` на true, если указано другое.
Когда эта опция включена, она предотвращает перемещение игроков в незагруженные чанки, что помогает избежать синхронной загрузки, которая может замедлить основной поток и вызвать задержки в игре. Вероятность того, что игрок окажется в незагруженном чанке, выше при меньшем расстоянии видимости.
Это полезная функция, особенно на серверах с ограниченными ресурсами, так как она помогает сохранить производительность и стабильность игрового процесса, минимизируя ситуации, когда игроки сталкиваются с лагами из-за загрузки чанков в реальном времени. Включение этой настройки может значительно улучшить опыт игры для всех игроков на сервере, так как предотвращает возникновение неожиданных задержек при перемещении по миру.
Измените значения
entity-per-chunk-save-limit
area_effect_cloud: 8
arrow: 16
breeze_wind_charge: 8
dragon_fireball: 3
egg: 8
ender_pearl: 8
experience_bottle: 3
experience_orb: 16
eye_of_ender: 8
fireball: 8
firework_rocket: 8
llama_spit: 3
potion: 8
shulker_bullet: 8
small_fireball: 8
snowball: 8
spectral_arrow: 16
trident: 16
wind_charge: 8
wither_skull: 4
С помощью этих опции вы можете установить пределы на количество сущностей определенного типа, которые могут быть сохранены. Рекомендуется задать лимит для каждого типа (например, стрелы или снаряды), чтобы избежать проблем с массивными количествами сущностей, что может привести к краху сервера при их загрузке. Вы можете использовать любой идентификатор сущности, который можно найти в вики Minecraft, чтобы определить, какие сущности включить в этот список. Рекомендуемое значение для всех типов — около 10. Также можно добавить другие сущности по их названиям типов в этот список. Однако стоит помнить, что эта настройка не предназначена для предотвращения создания игроками больших моб-ферм, а направлена исключительно на оптимизацию загрузки и сохранения сущностей, чтобы обеспечить стабильную работу сервера и улучшить игровой опыт для всех пользователей.
1. alt-item-despawn-rate
Рекомендуемые значения:
alt-item-despawn-rate
enabled: true
items:
cobblestone: 300
netherrack: 300
sand: 300
red_sand: 300
gravel: 300
dirt: 300
short_grass: 300
pumpkin: 300
melon_slice: 300
kelp: 300
bamboo: 300
sugar_cane: 300
twisting_vines: 300
weeping_vines: 300
oak_leaves: 300
spruce_leaves: 300
birch_leaves: 300
jungle_leaves: 300
acacia_leaves: 300
dark_oak_leaves: 300
mangrove_leaves: 300
cherry_leaves: 300
cactus: 300
diorite: 300
granite: 300
andesite: 300
scaffolding: 600
Этот список позволяет установить альтернативное время (в тиках) для исчезновения определенных типов сброшенных предметов быстрее или медленнее, чем по умолчанию. Эта опция может быть использована вместо плагинов для очистки предметов вместе с `merge-radius`, чтобы улучшить производительность.
2. redstone-implementation
Рекомендуемое значение: ALTERNATE_CURRENT
Заменяет систему редстоуна на более быстрые и альтернативные версии, которые сокращают количество лишних обновлений блоков, снижая нагрузку на сервер. Использование не-ванильной реализации может привести к небольшим несоответствиям с очень техническим редстоуном, но прирост производительности значительно превышает возможные проблемы. Неванильная реализация также может исправить другие несоответствия редстоуна, вызванные CraftBukkit. Реализация ALTERNATE_CURRENT основана на моде Alternate Current. Дополнительную информацию об этом алгоритме можно найти на их ресурсной странице.
3. hopper: disable-move-event
Рекомендуемое значение: false
Событие `InventoryMoveItemEvent` не срабатывает, если активных плагинов, слушающих это событие, нет. Поэтому устанавливать это значение в true следует только в том случае, если у вас есть такие плагины и вам не важно, что они не смогут реагировать на это событие. Не устанавливайте это значение в true, если хотите использовать плагины, которые слушают данное событие, например, плагины защиты!
4. hopper: ignore-occluding-blocks
Рекомендуемое значение: true
Определяет, будут ли хопперы игнорировать контейнеры внутри полных блоков, например, хоппер-минекарт внутри песчаного или гравийного блока. Оставив эту опцию включенной, вы можете сломать некоторые конструкции, зависящие от такого поведения.
5. tick-rates.mob-spawner
Рекомендуемое значение: 2
Эта опция позволяет настроить, как часто спавнеры должны получать тики. Более высокие значения означают меньшую нагрузку, если у вас много спавнеров, хотя если установить значение слишком высоко (относительно задержки вашего спавнера), скорость спавна мобов уменьшится.
6. optimize-explosions
Рекомендуемое значение: true
Установив это значение в true, вы замените ванильный алгоритм взрывов на более быстрый, что приведет к небольшой неточности при вычислении урона от взрыва. Это обычно не заметно.
7. treasure-maps.enabled
Рекомендуемое значение: false
Генерация карт сокровищ является очень затратной по ресурсам и может зависить сервер, если структура, которую она пытается обнаружить, находится в незагруженном чанке. Включать эту опцию безопасно только если вы предгенерировали ваш мир и установили ванильную границу мира.
8. treasure-maps.find-already-discovered
Рекомендуемые значения:
loot-tables: true
villager-trade: true
Значение по умолчанию этой опции заставляет вновь сгенерированные карты искать не исследованные структуры, которые обычно находятся в еще не загруженных чанках. Установка этого значения в true позволит картам вести к структурам, которые были обнаружены ранее. Если вы не измените это значение, вы можете столкнуться с зависанием или аварийной остановкой сервера при генерации новых карт сокровищ. Опция villager-trade предназначена для карт, полученных от торговцев согласно, а loot-tables относится ко всему, что динамически генерирует дроп, например, к сокровищницам, сундукам данжей и т. д.
9. tick-rates.grass-spread
Рекомендуемое значение: 4
Время в тиках между попытками сервера разнести траву или мицелиум. Это сделает так, что большие площади земли будут дольше превращаться в траву или мицелиум. Установка значения около 4 должна хорошо работать, если вы хотите уменьшить это значение, не заметив снижения скорости распространения.
10. tick-rates.container-update
Рекомендуемое значение: 1
Время в тиках между обновлениями контейнеров. Увеличение этого значения может помочь, если обновления контейнеров вызывают у вас проблемы (это редко происходит), но это также может привести к тому, что игроки будут сталкиваться с десинхронизацией при взаимодействии с инвентарями (призрачные предметы).
11. non-player-arrow-despawn-rate
Рекомендуемое значение: 20
Время в тиках, через которое стрелы, выпущенные мобами, должны исчезнуть после попадания во что-то. Игроки не могут подбирать эти стрелы, так что вы можете установить это значение на уровне 20 (1 секунда).
12. creative-arrow-despawn-rate
Рекомендуемое значение: 20
Время в тиках, через которое стрелы, выпущенные игроками в режиме креатива, должны исчезнуть после попадания во что-то. Игроки не могут подбирать эти стрелы, так что вы можете установить это значение на уровне 20 (1 секунда).
Файл bukkit.yml
Измените значения
spawn-limits
monsters: 20
animals: 5
water-animals: 2
water-ambient: 2
water-underground-creature: 3
axolotls: 3
ambient: 1
Логично, что чем меньше эти цифры, тем меньше мобов вы увидите.
Если вы используете Paper, вы можете установить ограничения мобов на мир в файле paper-world.yml, который находится в директории paper-world.
Измените значения
ticks-per
monster-spawns: 10
animal-spawns: 400
water-spawns: 400
water-ambient-spawns: 400
water-underground-creature-spawns: 400
axolotl-spawns: 400
ambient-spawns: 400
Эти опции устанавливают, как часто (в тиках) сервер пытается спавнить определенные живые сущности. Мобы, такие как водные или окружающие, не нуждаются в спавне каждый тик, так как они обычно не погибают так быстро. Что касается монстров: легкое увеличение времени между спавнами не должно существенно повлиять на частоту спавна, даже в фермах мобов. В большинстве случаев все значения в этой опции должны быть больше 1. Установка более высокого значения также позволяет вашему серверу лучше справляться с районами, где спавн мобов отключен. Это может значительно улучшить общую производительность сервера, особенно в высоконагруженных областях или местах, где избыточное количество сущностей может вызвать замедление игры.
Правильная настройка этих параметров поможет достичь баланса между насыщенностью мира мобами и стабильностью работы сервера.
Файл pufferfish.yml
Измените значения параметров
1. dab.enabled
Рекомендуемое значение: true
DAB (динамическая активация интеллекта) снижает уровень, на котором сущность обрабатывается (тик), в зависимости от дальности до игроков. DAB работает на градиентной основе, а не по жесткому порогу, как EAR. Это означает, что сущности, находящиеся ближе к игрокам, будут тикаться в полной мере, в то время как удаленные сущности будут получать меньше тиков в зависимости от расчета, зависимого от параметра dab.activation-dist-mod.
2. dab.max-tick-freq
Рекомендуемое значение: 20
Определяет минимальную частоту тиков для сущностей, находящихся на далеком расстоянии от игроков. Увеличение этого значения может улучшить производительность сущностей, находящихся вне поля зрения, но может сломать фермы или значительно ухудшить поведение мобов. Если включение DAB вызывает проблемы с фермами мобов, попробуйте уменьшить это значение.
3. dab.activation-dist-mod
Рекомендуемое значение: 7
Управляет градиентом, по которому проверяются мобы. Уменьшение этого значения активирует DAB ближе к игрокам, что улучшает приросты производительности DAB, но может повлиять на взаимодействие сущностей с окружающей средой и сломать фермы мобов. Если включение DAB вызывает проблемы с фермами, попробуйте увеличить это значение.
4. enable-async-mob-spawning
Рекомендуемое значение: true
Указывает, следует ли включить асинхронный спавн мобов. Для правильной работы этой опции необходимо, чтобы настройка per-player-mob-spawns в Paper была включена. Эта опция не спавнит мобов асинхронно, но разгружает большую часть вычислительной работы, связанной со спавном новых мобов, на другой поток. Включение этой опции не должно быть заметным в стандартной игре.
5. enable-suffocation-optimization
Рекомендуемое значение: true
Оптимизирует проверку удушения (проверка, находится ли моб внутри блока и получает ли он урон от удушения), ограничивая частоту проверки временем таймаута урона. Эта оптимизация, как правило, незаметна, если вы не являетесь крайне техническим игроком, который использует точное время тиков для уничтожения сущности в нужный момент.
6. inactive-goal-selector-throttle
Рекомендуемое значение: true
Ограничивает селектор целей ИИ для неактивных сущностей, обновляя селектор целей каждые 20 тиков вместо каждого тика. Это может улучшить производительность на несколько процентов и имеет незначительные игровые последствия.
Заключение
Настройки, описанные выше, помогают улучшить производительность сервера, особенно в условиях высокой нагрузки. Правильная настройка этих параметров не только снизит нагрузку на сервер, но и позволит сохранить стабильность игрового процесса, не влияя на игровой опыт пользователей. Не бойтесь экспериментировать с этими значениями для достижения наилучшего результата для вашего сервера.