Примечание для пользователей, использующих Vanilla, Fabric или Spigot (и всё, что ниже Paper):
Перейдите в файл server.properties и измените значение sync-chunk-writes
на false
. На Paper и его форках эта опция принудительно выставлена в false
, а на других реализациях сервера её нужно отключать вручную. Это позволяет серверу сохранять чанки вне основного потока, снижая нагрузку на главный цикл тиков.
Руководство для версии 1.21. Некоторые моменты могут быть применимы и для версий 1.15 – 1.20.
Основано на данном гайде и других источниках (ссылки приведены в соответствующих разделах).
Никогда не появится гайда, который даст вам идеальный результат для любого сервера. Каждый сервер имеет свои особенности и ограничения – сколько можно или хочется пожертвовать производительностью. Эксперименты с настройками для точной подгонки под нужды сервера – вот в чём суть дела. Это руководство предназначено для понимания влияния различных опций на производительность и их реального назначения. Если вы нашли неточности в информации – вы можете открыть issue или внести pull request для её исправления.
Выбор серверного ПО может значительно повлиять на производительность и возможности API. В настоящее время существует несколько популярных серверных JAR-файлов, однако есть и те, от которых лучше держаться по ряду причин.
Рекомендуемые варианты (ядра):
Рекомендуем Purpur как выбор от нашего хостинга.
Следует избегать:
Предгенерация мира благодаря оптимизациям генерации чанков за последние годы стала полезна только на серверах с крайне ограниченными или однонитевыми ЦПУ. Однако предгенерация часто используется для генерации чанков для плагинов карт мира, таких как Pl3xMap или Dynmap.
Если вы всё же хотите предгенерировать мир, можно использовать плагин, например, Chunky. Обязательно установите границы мира, чтобы игроки не генерировали новые чанки! Учтите, что предгенерация может занимать часы в зависимости от выбранного радиуса. Помните, что с Paper и выше ваш TPS не будет зависеть от загрузки чанков, однако скорость их загрузки может значительно снизиться, если ЦПУ сервера перегружено.
Важно помнить, что Overworld, Nether и End имеют отдельные границы мира, которые необходимо настроить для каждого измерения. Размер Nether в 8 раз меньше Overworld (если не изменён через datapack), поэтому при неверной установке границ игроки могут оказаться за пределами мира!
Обязательно установите ванильные границы мира (/worldborder set [диаметр]
), так как они ограничивают определённые функции, такие как диапазон поиска на картах сокровищ, что может вызывать всплески лагов.
Рекомендуемое начальное значение: 256
Эта настройка определяет порог размера пакета, после которого сервер пытается его сжать. Увеличение значения может снизить нагрузку на ЦПУ за счёт большего расхода пропускной способности, а установка -1 отключает сжатие. При размещении сервера за прокси или на той же машине (с пингом менее 2 мс) отключение (значение -1) будет выгодно, так как внутренняя сеть обычно справляется с дополнительным объёмом несжатых данных.
Рекомендуемое начальное значение: true
Позволяет включить альтернативную систему keepalive от Purpur, чтобы игроки с нестабильным соединением реже получали таймауты.
При включении этой опции сервер отправляет игроку keepalive-пакет раз в секунду и отключает его только если за 30 секунд не получено ни одного ответа. Любой ответ в любом порядке сохраняет соединение.
Рекомендуемое начальное значение: 4
Simulation distance – это расстояние в чанках вокруг игрока, в пределах которого сервер выполняет тики. Это влияет на работу таких процессов, как плавление в печах, рост культур и саженцев. Рекомендуется установить это значение низким (примерно 3 или 4), чтобы использовать опцию view-distance
для визуализации большего количества чанков без их тикания.
Рекомендуемое начальное значение: 7
Расстояние в чанках, которое отправляется игроку (аналог no-tick-view-distance у Paper).
Общее view-distance будет равно наибольшему значению из simulation-distance
и view-distance
. Например, если simulation-distance = 4, а view-distance = 12, клиент получит данные на 12 чанков.
Рекомендуемое начальное значение: default
Это значение переопределяет параметр из server.properties, если не установлено значение default
. Рекомендуется оставить значение по умолчанию, чтобы управление обоими параметрами было централизованным.
Рекомендуемое начальное значение: 10s
Настройка определяет, как долго чанки будут оставаться загруженными после ухода игрока. Это помогает избежать постоянной загрузки и выгрузки одних и тех же чанков при перемещении игрока. Слишком высокое значение может привести к одновременной загрузке слишком большого количества чанков. В часто посещаемых областях лучше оставить чанки постоянно загруженными.
Рекомендуемое начальное значение: 8
Позволяет распределить задачу по сохранению мира во времени для улучшения средней производительности. При большом количестве игроков (20–30 и более) можно установить значение выше 8. Если инкрементальное сохранение не успевает завершиться, Bukkit автоматически сохранит оставшиеся чанки и начнёт процесс заново.
Рекомендуемое начальное значение: true
При включении предотвращает перемещение игроков в выгруженные чанки, что может вызвать синхронную загрузку и перегрузку основного потока, вызывая лаги. Вероятность такого случая выше при низком view-distance.
Рекомендуемые начальные значения:
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
Эта настройка позволяет задать лимиты на количество сохраняемых объектов определённых типов. Рекомендуется установить лимит для каждого снаряда, чтобы избежать сохранения огромного количества объектов, что может привести к крашу сервера. Значение около 10 для всех снарядов – оптимальное. Вы также можете добавить другие типы сущностей, указав их ID (подробнее см. в вики Minecraft). Этот параметр не предназначен для предотвращения создания больших ферм мобов.
Рекомендуемое начальное значение: 8
Определяет максимальное количество чанков, которые снаряд может загрузить за время своего существования. Снижение этого значения уменьшает нагрузку от снарядов, но может вызвать проблемы с трезубцами, эндер-жемчугами и т.д.
Рекомендуемые начальные значения:
monsters: 20
animals: 5
water-animals: 2
water-ambient: 2
water-underground-creature: 3
axolotls: 3
ambient: 1
Логика ограничения количества мобов – умножение количества игроков на указанный лимит. Чем ниже значения, тем меньше мобов будет в мире. Опция per-player-mob-spawn
дополнительно распределяет спаун мобов равномерно между игроками. Снижение этих значений снижает нагрузку на сервер, но в некоторых режимах игры естественный спаун мобов является важной частью игрового процесса. При необходимости можно установить значение даже ниже 20, скорректировав также параметр mob-spawn-range
.
Рекомендуемые начальные значения:
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.
Рекомендуемое начальное значение: 3
Определяет радиус (в чанках), в пределах которого мобы будут заспаунены вокруг игрока. В зависимости от режима игры и количества игроков это значение можно уменьшить совместно с spawn-limits
из bukkit.yml. При меньшем значении вокруг игрока будет казаться, что мобов больше. Значение должно быть меньше или равно simulation distance и никогда не превышать жёсткий диапазон деспауна, делённый на 16.
Рекомендуемые начальные значения:
animals: 16
monsters: 24
raiders: 48
misc: 8
water: 8
villagers: 16
flying-monsters: 48
Позволяет установить расстояние (в чанках) от игрока, при котором сущность начинает тикаться (выполнять действия). Снижение этих значений улучшает производительность, но может привести к «зависанию» мобов до приближения игрока. Слишком низкие значения могут нарушить работу ферм мобов (например, фермы железа).
Рекомендуемые начальные значения:
players: 48
animals: 48
monsters: 48
misc: 32
other: 64
Расстояние (в блоках), на котором сущности будут видимы, хотя и не отправляются игроку. Слишком маленькое значение может привести к тому, что мобы будут внезапно появляться рядом с игроком. Обычно это значение должно быть выше, чем entity-activation-range
.
Рекомендуемое начальное значение: false
Позволяет управлять, будут ли жители тикаться вне зоны активации. Отключение этой опции улучшает производительность, но может запутать игроков в некоторых ситуациях (например, при работе ферм железа или обновлении торговли).
Рекомендуемое начальное значение: true
Позволяет сделать мобов, заспауненных спаунерами, без ИИ. Такие «обездвиженные» мобы ничего не делают. При желании их можно заставить прыгать в воде, изменив параметр spawner-nerfed-mobs-should-jump
в [paper-world configuration].
Рекомендуемые начальные значения:
ambient:
hard: 72
soft: 30
axolotls:
hard: 72
soft: 30
creature:
hard: 72
soft: 30
misc:
hard: 72
soft: 30
monster:
hard: 72
soft: 30
underground_water_creature:
hard: 72
soft: 30
water_ambient:
hard: 72
soft: 30
water_creature:
hard: 72
soft: 30
Позволяет настроить диапазоны деспауна сущностей (в блоках). Уменьшение значений ускоряет удаление мобов, находящихся далеко от игрока. Рекомендуется оставить soft range около 30 и настроить hard range немного выше фактического simulation-distance, чтобы мобы не исчезали сразу, как только игрок выходит за границу загруженного чанка (благодаря параметру delay-chunk-unloads-by
в paper-world configuration). Моб деспаунится мгновенно, если находится вне hard range, а между soft и hard – с определённой вероятностью.
Рекомендуемое начальное значение: true
Эта опция определяет, должен ли спаун мобов учитывать количество уже присутствующих рядом с игроком мобов. Это помогает избежать проблем, когда фермы мобов заполняют сервер, и позволяет устанавливать более низкие spawn-limits
. Включение имеет небольшой дополнительный расход ресурсов, который окупается улучшением распределения спаунов.
Рекомендуемое начальное значение: 2
Переопределяет аналогичный параметр из spigot.yml и определяет, сколько столкновений может обработать одна сущность одновременно. Значение 0 приводит к невозможности толкать другие сущности, включая игроков. Значение 2 обычно оптимально. Учтите, что при значении выше этого параметра геймерегула maxEntityCramming не будет иметь эффекта.
Рекомендуемое начальное значение: false
Отключение этой опции приводит к уменьшению количества перерасчётов пути, что повышает производительность. В отдельных случаях это может вызвать небольшую задержку в реакциях мобов – обновление пути произойдёт каждые 5 тиков (0.25 сек).
Рекомендуемое начальное значение: true
Включение данной опции исправляет ситуацию, когда сущности, взбирающиеся по блокам, не подвержены ограничению столкновений. Это предотвратит ситуацию, когда слишком много мобов скапливаются в узких пространствах (например, у пауков).
Рекомендуемое начальное значение: false
В большинстве случаев можно безопасно отключить тикание бронестендов. Если же используются плагины, изменяющие их поведение, и возникают проблемы – включите эту опцию. Она предотвращает влияние воды или гравитации на бронестенды.
Рекомендуемое начальное значение: false
Отключает столкновения бронестендов, что может помочь, если их очень много и коллизии не требуются.
Рекомендуемые начальные значения:
behavior:
villager:
validatenearbypoi: 60
acquirepoi: 120
sensor:
villager:
secondarypoisensor: 80
nearestbedsensor: 80
villagerbabiessensor: 40
playersensor: 40
nearestlivingentitysensor: 40
Эти параметры определяют, как часто (в тиках) выполняются определённые поведения и сенсоры. Для жителей самое затратное поведение – acquirepoi
, поэтому его интервал увеличен. При проблемах с навигацией жителей можно попробовать уменьшить это значение.
Рекомендуемое начальное значение: true
DAB (динамическая активация мозга) снижает частоту тиков для сущностей, находящихся дальше от игроков. В отличие от жёсткого порога, DAB работает по градиенту, постепенно уменьшая частоту тиков в зависимости от расстояния.
Рекомендуемое начальное значение: 20
Задаёт минимальную частоту тиков для сущностей, находящихся на максимальном расстоянии от игроков. Увеличение может улучшить производительность в удалённых областях, но потенциально нарушить работу ферм или снизить активность мобов.
Рекомендуемое начальное значение: 7
Контролирует градиент, по которому мобы получают тики. Уменьшение этого значения активирует DAB ближе к игроку, что даёт прирост производительности, но может повлиять на взаимодействие мобов с окружающей средой.
Рекомендуемое начальное значение: true
Позволяет включить асинхронный спаун мобов. Для корректной работы эта опция требует включения per-player-mob-spawns от Paper. Фактически, данная опция не спаунит мобов асинхронно, а лишь переносит часть вычислительной нагрузки на отдельный поток. В обычном геймплейе разницы не заметно.
Рекомендуемое начальное значение: true
Оптимизирует проверку на удушение (определение, находится ли моб внутри блока и должен ли он получать урон). Оптимизация происходит за счёт ограничения частоты проверок до таймаута урона – обычно незаметна для большинства игроков.
Рекомендуемое начальное значение: true
Замедляет работу системы выбора целей у неактивных сущностей, обновляя её каждые 20 тиков вместо каждого. Это может повысить производительность на несколько процентов с незначительными изменениями в поведении мобов.
Рекомендуемое начальное значение: false
При включении зомби перестают атаковать жителей, если сервер работает ниже установленного порога TPS (определённого параметром lagging-threshold
).
Рекомендуемое начальное значение: false
Отключает использование порталов для всех сущностей, кроме игроков. Это предотвращает загрузку чанков при переходе между мирами, что обычно происходит в основном потоке. В результате сущности не смогут использовать порталы.
Рекомендуемое начальное значение: true
Включать эту опцию следует только в случае, если жители вызывают лаги! В противном случае частые проверки пути могут снизить производительность.
Жители, подвергнутые «лоботомии», лишаются ИИ и периодически обновляют свои предложения. Отключение лоботомии возвращает им полноценное поведение.
Рекомендуемые начальные значения:
acquire-poi: 16
nearest-bed-sensor: 16
Радиус, в пределах которого жители ищут рабочие блоки и кровати. Это значительно улучшает производительность при большом количестве жителей, но ограничивает их поиск объектами, находящимися дальше указанного значения.
Рекомендуемые начальные значения:
item: 3.5
exp: 4.0
Определяет расстояние, на котором предметы и орбы опыта объединяются, снижая количество тиков объектов на земле. Слишком большое значение может создавать эффект «исчезновения» предметов при слиянии, а также нарушить работу некоторых ферм, позволяя предметам «телепортироваться» сквозь блоки (если не активирована опция Paper fix-items-merging-through-walls
). Орбы опыта объединяются только при создании.
Рекомендуемое начальное значение: 8
Время (в тиках), которое воронки ждут для перемещения предмета. Увеличение этого значения может повысить производительность на серверах с большим количеством воронок, но нарушить работу часов и систем сортировки.
Рекомендуемое начальное значение: 8
Интервал (в тиках) между проверками воронок на наличие предметов сверху или в инвентаре выше. Повышение этого значения может улучшить производительность, но повлияет на корректность работы некоторых механизмов (например, водяных конвейеров).
Рекомендуемые начальные значения:
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.
Рекомендуемое начальное значение: ALTERNATE_CURRENT
Заменяет ванильную систему редстоуна на более быструю альтернативную реализацию, снижающую количество избыточных обновлений блоков. Использование нестандартной реализации может внести незначительные несоответствия в работу сложных схем, но прирост производительности перевешивает возможные мелкие проблемы. Реализация ALTERNATE_CURRENT основана на Alternate Current.
Рекомендуемое начальное значение: false
Событие InventoryMoveItemEvent
не вызывается, если к нему не привязан плагин. Эту опцию следует включать только в том случае, если у вас есть плагины, активно её использующие, и вас не волнует их отключение. Не включайте, если хотите использовать плагины, зависящие от данного события (например, плагины защиты).
Рекомендуемое начальное значение: true
Определяет, будут ли воронки игнорировать контейнеры, расположенные внутри непрозрачных блоков (например, вагонетка с воронкой внутри песка или гравия). Оставление этой опции включённой может нарушить работу некоторых contraption’ов.
Рекомендуемое начальное значение: 2
Позволяет настроить, как часто (в тиках) будут тикаться спаунеры. Повышение этого значения снижает нагрузку при большом количестве спаунеров, однако слишком высокое значение может снизить скорость спауна мобов.
Рекомендуемое начальное значение: true
При включении заменяет ванильный алгоритм взрывов на более быстрый, с незначительной потерей точности в расчётах урона – обычно незаметно.
Рекомендуемое начальное значение: false
Генерация карт сокровищ крайне затратна по ресурсам и может подвесить сервер, если структура находится в не сгенерированном чанке. Безопасно включать эту опцию только если мир предгенерирован и установлены ванильные границы мира.
Рекомендуемые начальные значения:
loot-tables: true
villager-trade: true
По умолчанию новая карта ищет неоткрытые структуры, которые могут находиться в ещё не сгенерированных чанках. Установка этого значения в true
позволяет карте указывать на ранее обнаруженные структуры. Если оставить значение false
, сервер может подвисать или крашиться при генерации новых карт сокровищ. Параметр villager-trade
относится к картам, полученным через торговлю с жителями, а loot-tables
– к картам, связанным с динамическим генерацией лута (сундуки, данжи и т.д.).
Рекомендуемое начальное значение: 4
Интервал (в тиках) между попытками распространения травы или мицелия. Это означает, что большие площади земли будут медленнее покрываться травой или мицелием. Значение около 4 обычно оптимально, так как снижение скорости распространения остаётся незаметным.
Рекомендуемое начальное значение: 1
Интервал (в тиках) между обновлениями контейнеров. Повышение этого значения может помочь, если обновления контейнеров вызывают проблемы (что происходит редко), но может привести к рассинхронизации при взаимодействии с инвентарём (появление «призрачных» предметов).
Рекомендуемое начальное значение: 20
Время (в тиках), через которое стрелы, выпущенные мобами, исчезают после столкновения с объектом. Игроки не могут подобрать такие стрелы, поэтому значение 20 (1 секунда) оптимально.
Рекомендуемое начальное значение: 20
Время (в тиках), через которое стрелы, выпущенные игроками в креативном режиме, исчезают после столкновения с объектом.
Рекомендуемое начальное значение: true
Отключает дополнительное профилирование, проводимое игрой. Это профилирование не требуется для продакшн-среды и может вызывать дополнительную нагрузку.
Рекомендуемое начальное значение: true
Запрещает дельфинам выполнять поиск структур, аналогичный поиску сокровищ.
Рекомендуемое начальное значение: true
Позволяет телепортировать игрока к точке спауна, если он оказывается вне границ мира. Это полезно, так как ванильные границы мира могут обходиться, а нанесённый урон игроку можно смягчить.
Рекомендуемое начальное значение: true
Включите эту опцию для скрытия руд от эксплойтеров x-ray. Для детальной настройки смотрите Конфигурация Anti-Xray. Включение может немного снизить производительность, но оно всё же эффективнее любых анти-xray плагинов.
Рекомендуемое начальное значение: 127
Если значение больше 0, игроки, находящиеся выше указанного уровня, будут получать урон, как будто они находятся в пустоте. Это предотвращает использование крыши Nether. Ванильный Nether имеет высоту 128 блоков, поэтому рекомендуемое значение – 127. Если вы изменяете высоту Nether, установите значение равным [новая_высота] - 1
.
Vanilla Minecraft и серверное ПО версии 1.20.5+ требуют Java 21 или выше. Oracle изменил лицензионную политику, поэтому нет особой необходимости получать Java от них. Рекомендуемые поставщики – Adoptium и Amazon Corretto. Альтернативные реализации JVM, такие как OpenJ9 или GraalVM, могут работать, но не поддерживаются Paper и известны своими проблемами, поэтому в настоящее время не рекомендуются.
На хостинге Pterohost используется собственная система управления запуском, которая позволяет выбрать несколько параметров, включая, например, G1GC1. Обратите внимание, что на нашем хостинге применяется новейшее оборудование с максимально возможной частотой на ядро, что обеспечивает высокую производительность.
Кроме того, добавление бета-флага --add-modules=jdk.incubator.vector
перед -jar
в параметрах запуска может улучшить производительность. Этот флаг позволяет Pufferfish использовать SIMD-инструкции вашего ЦПУ, ускоряя некоторые математические операции – например, рендеринг карт (как в плагине imageonmaps) может выполняться до 8 раз быстрее.
Абсолютно не нужны, так как их можно заменить настройками merge-radius и alt-item-despawn-rate, к тому же они менее настраиваемы, чем стандартные конфигурационные опции сервера. Обычно они используют больше ресурсов на сканирование и удаление предметов, чем просто их оставление.
Очень сложно оправдать их использование. Стекание естественно заспауненных сущностей создаёт больше лагов, чем их отсутствие, из-за постоянных попыток сервера заспаунить новые мобы. Единственный «приемлемый» случай – для спаунеров на серверах с их большим количеством.
Любые плагины, которые включают или выключают другие плагины во время работы, крайне опасны. Их загрузка может вызвать фатальные ошибки из-за нарушения зависимости между плагинами. Команда /reload
страдает от тех же проблем – подробнее можно прочитать в блоге me4502.
Paper предоставляет команду /mspt
, которая показывает, сколько времени сервер тратил на обработку последних тиков. Если первые два значения меньше 50, поздравляем – сервер работает без лагов! Если же третье значение выше 50, значит, был как минимум один тик с превышением – это нормально и случается время от времени.
Spark – плагин для профилирования использования ЦПУ и памяти сервера. Инструкции по использованию можно найти в его вики. Также существует руководство по поиску причин лагов здесь.
Авторство (copyright):