
Хотите, чтобы сервер не лагал и игроки были довольны? Тогда поехали. В этой статье разберём основные способы оптимизации сервера Minecraft Java.
Актуально для версий 1.16+, 1.20+, 1.21+

Майнкрафт жрёт процессор, и особенно одно ядро — потому что почти вся игра крутится на нём. Берите процессор с высокой тактовой частотой: Intel i5/i7 или AMD Ryzen.
Минимум — 2 ГБ. Для больших серверов ставьте 8 ГБ и больше.
Параметры -Xmx и -Xms в командной строке запуска сервера должны быть настроены в зависимости от доступной памяти.
Как настроить эти параметры:
Найдите файл, которым запускаете сервер. Обычно это
start.bat(для Windows) илиstart.sh(для Linux). Откройте этот файл с помощью блокнота. Измените значение параметра -Xmx (максимальный объем оперативки) и -Xms (минимальный объем).
Пример: java -Xmx6G -Xms6G -jar server.jar nogui
Лучше использовать SSD вместо HDD, это поможет ускорить загрузку и сохранение мира.
Обязательно прочитайте гайд ниже, если не знаете, сколько потребуется ресурсов для вашего сервера Майнкрафт ↓
📑 Требования сервера Майнкрафт: оперативная память, процессор, SSD

Первое, что поможет убрать лаги с сервера Майнкрафта — это настройка конфигурации.
Основные файлы, на которые стоит обратить внимание:
Важно:
Если сервер работает нормально и не лагает — ничего не трогайте. Случайные правки могут сломать ванильный геймплей, и потом будет сложно всё вернуть назад.Меняйте настройки только если понимаете, зачем это нужно.
Подключитесь к файлам сервера через FTP. В основной папке вы найдете все вышеперечисленные файлы (в зависимости от установленного ядра). Рекомендуется открывать их через NotePad++ или блокнот.

Этот файл содержит основные настройки сервера. Поменяв некоторые параметры, можно сделать так, чтобы сервер работал быстрее и меньше лагал.
Эта настройка решает, когда сервер должен «сжимать» данные, чтобы они занимали меньше места при пересылке игрокам.
Маленькое число (например, 128) → сервер сжимает почти всё. Это помогает игрокам с плохим интернетом, но нагружает процессор сервера (заставляет его сильнее работать).
Большое число (например, 512) → сервер сжимает только большие данные. Это экономит процессор, но требует хороший интернет у игроков.
Рекомендуемое значение: 256
Это значение полезно ставить, если ваш сервер и прокси (например, BungeeCord) находятся на одном и том же компьютере или в одной локальной сети (прямом соединении с очень маленькой задержкой, меньше 2 мс).
Почему?
Внутри такой быстрой сети не нужно сжимать данные — она и так справляется с большим потоком информации. Это сэкономит ресурсы процессора.
Это расстояние в чанках (квадратных кусках мира) от игрока, внутри которого всё работает: печи плавят руду, растут пшеница и деревья, работают механизмы и.т.д.

Как выглядит один чанк наглядно
За пределами этого расстояния мир останавливается — ничего не будет происходить, чтобы не нагружать сервер.
Рекомендуемое значение: 4-6
1. Если поставить маленькое значение (к примеру 3):
2. Если поставить большое число (например, 10 или 12):
Плюс: Механизмы работают очень далеко от игрока. Фермы не останавливаются.
Минус: Сервер сильно нагружается, ведь он должен просчитывать огромную область. Появятся лаги.
Настройка влияет на то, как далеко игрок видит мир — чанки (куски земли), деревья, горы, постройки других игроков.

Рекомендуемое значение: 7
Важно: связан simulation-distance
Сервер смотрит на две настройки: simulation-distance (сколько чанков работает) и view-distance (сколько видно). Итоговое расстояние видимости будет = наибольшее число из этих двух.
Представим, что у вас стоит: simulation-distance = 4, а view-distance = 12.
Результат: Сервер покажет картинку на 12 чанков, но работать (тикать) внутри будут только 4 чанка рядом с игроком. Остальные 8 чанков будут просто статичной картинкой — их видно, но они ничего не делают.
Дополнительные настройки для серверов на Spigot.
Эта настройка заменяет ту, что в server.properties, поэтому лучше оставить её как default, чтобы управлять расстоянием видимости только из одного места и не путаться.
Рекомендуемое значение: default
Радиус в чанках вокруг игрока, где появляются мобы.
Если уменьшить это значение, мобы будут появляться к игроку ближе, из-за чего будет казаться, что их больше. Можно уменьшать это число вместе с spawn-limits в bukkit.yml.

Наглядная схема зоны появления мобов. 16 блоков (16 м) = 1 чанку
Значение должно быть меньше или равно расстоянию обзора, иначе мобы будут исчезать неправильно или сервер начнет лагать.
Рекомендуемое значение: 3-4
Вы можете установить, на каком расстоянии от игрока должна находиться сущность, чтобы она могла выполнять действия.
Слишком сильное уменьшение этого параметра повышает производительность, но может привести к поломке некоторых ферм мобов, особенно железных ферм.
Рекомендуемые значение и описания параметров:
entity-activation-range: # Радиус в блоках, на котором существа начинают двигаться и работать.
animals: 10
monsters: 12
raiders: 12
misc: 4
water: 4
villagers: 8
flying-monsters: 24
wake-up-inactive: # Настройки того, как сервер будит замороженных существ, чтобы они немного пофункционировали.
animals-max-per-tick: 2 # Все что с припиской per-tick — сколько существ за один тик можно разбудить.
animals-every: 1200 # Все что с припиской every — как часто (в тиках) происходит пробуждение.
animals-for: 60 # Все что с припиской for — как долго (в тиках) существа работают после пробуждения.
monsters-max-per-tick: 2
monsters-every: 400
monsters-for: 60
villagers-max-per-tick: 1
villagers-every: 600
villagers-for: 60
flying-monsters-max-per-tick: 2
flying-monsters-every: 200
flying-monsters-for: 60
villagers-work-immunity-after: 100 # Настройки того, как долго жители не засыпают после работы.
villagers-work-immunity-for: 20
villagers-active-for-panic: true # Если поставить false, жители не паникуют и фермы железа не работают.
tick-inactive-villagers: false # Будут ли неактивные жители вообще тикать.
ignore-spectators: true # Будут ли игнорировать игроков в режиме наблюдения при обработке существ.
Расстояние в блоках, на котором игрок видит существ и других игроков. Дальше этого расстояния они просто не отобразятся на экране.
Важно: Значение обязательно должно быть больше, чем entity-activation-range (расстояние, на котором существа начинают двигаться).
Рекомендуемое значение:
players: 48
animals: 48
monsters: 48
misc: 32
other: 64
Если поставить слишком маленькое значение — мобы будут появляться из воздуха прямо перед носом у игрока, потому что сервер не показывал их заранее.
Если поставить true, то мобы, которые появляются из спавнера, будут неактивными: у них нет искусственного интеллекта, они не двигаются, не атакуют и вообще ничего не делают.

Мобы без ИИ будут стоять, как замороженные
Зачем это нужно:
Такие мобы почти не грузят сервер, потому что им не нужно думать и двигаться. Отлично подходит для ферм опыта или предметов.
Рекомендуемое значение: true
Если в
paper.ymlпоставить вspawner-nerfed-mobs-should-jumpзначениеtrue, то даже неактивные мобы смогут прыгать в воду. Это нужно для некоторых водяных ферм, где мобы должны заходить в воду, чтобы их смыло течением.
Расстояние в блоках, на котором предметы и шарики опыта будут слипаться в одну кучку. Чем меньше предметов валяется отдельно друг от друга, тем меньше сервер нагружается. Слипание помогает снизить лаги.

Когда предметы слипаются, серверу проще их обрабатывать
Рекомендуемые параметры:
item: 3.5
exp: 4.0
Если поставить слишком большое значение — предметы будут телепортироваться друг к другу прямо через стены, игроки подумают что они исчезли, а некоторые фермы сломаются.
Чтобы сервер проверял, есть ли между предметами стена, можно включить отдельную настройку в
paper.ymlfix-items-merging-through-walls
Время в тиках, которое воронка ждёт перед тем, как подвинуть предмет дальше.
Рекомендуемое значение: 8
Время в тиках между проверками воронки: есть ли над ней контейнер с предметами или предмет на земле.
Рекомендуемое значение: 8
paper.yml - файл конфигурации используется серверами Paper для дополнительных настроек производительности
Расстояние в блоках от игрока, на котором существа сами исчезают (деспавнятся), чтобы не грузить сервер.
Как это будет работать?
Существа не исчезают мгновенно. Сначала на мягком расстоянии они получают шанс исчезнуть. Чем дальше от игрока, тем шанс выше. На жёстком расстоянии они исчезают гарантированно.
Рекомендуемые значения:
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
Время в секундах, сколько чанк остаётся загруженным после ухода игрока.
Данная настройка полезна тем, что, если игрок бегает туда-сюда, чанк не выгружается и не загружается каждый раз заново. Это поможет экономить ресурсы сервера.
Рекомендуемое значение: 7s
Важно:
Если поставить слишком большое время, одновременно будет загружено слишком много чанков (старые ещё не выгрузились, а новые уже подгружаются). Сервер начнёт лагать.
Сколько чанков сервер может сохранять на диск за один тик.
Рекомендуемое значение: 8
Если на сервере много игроков (20-30+), лучше увеличить это значение, чтобы чанки сохранялись быстрее и не было фризов.
Не даёт игрокам заходить в ещё не загруженные чанки.

Если выключить (false), игрок может зайти в пустоту, из-за чего сервер начнёт срочно подгружать чанки, основной поток перегрузится и появятся лаги.
Совет:
Чем меньше расстояние обзора (view-distance), тем выше шанс, что игрок наткнётся на незагруженный чанк.
Рекомендуемое значение: true
Лимит сущностей одного типа, которые можно сохранить в одном чанке.
Например: Если в чанке 100 стрел, а лимит 10, то при сохранении мира останутся только 10 стрел. Остальные 90 исчезнут.
Этот параметр нужен, чтобы чанки не переполнялись мусором (стрелы, яйца, жемчуг). Если такого мусора слишком много, сервер может упасть при загрузке чанка.

100 стрел в одном чанке — сервер под угрозой лагов
Рекомендуемые значения:
experience_orb: 16
arrow: 16
dragon_fireball: 3
egg: 8
ender_pearl: 8
eye_of_ender: 8
fireball: 8
small_fireball: 8
firework_rocket: 8
potion: 8
llama_spit: 3
shulker_bullet: 8
snowball: 8
spectral_arrow: 16
experience_bottle: 3
trident: 16
wither_skull: 4
area_effect_cloud: 8
# Можно добавлять любые другие существа по их названиям.
Включает спавн мобов отдельно для каждого игрока. Это позволяет снизить общие лимиты мобов (spawn-limits) без вреда для игроков.
Если включить (true), у каждого игрока будет свой лимит мобов. Один игрок не сможет забить фермой всех мобов на сервере, и у других они всё равно будут появляться.
Рекомендуемое значение: true
Сколько других сущностей может одновременно толкать одна сущность.

Эта настройка важнее, чем точно такая же настройка в
spigot.yml. Если вspigot.ymlстоит одно число, а здесь другое — сервер возьмёт то, что написано здесь.
Рекомендуемое значение: 2
Если выключить, мобы не будут пересчитывать путь, если ломается или ставится блок. Это снижает нагрузку на сервер.
Рекомендуемое значение: false
Минус:
Мобы будут выглядеть немного тупыми — они обновляют свой маршрут только раз в 5 тиков (0.25 секунды).
Чинит баг, при котором на существ, которые лезут по стенам, не действовало правило давки (maxEntityCramming).
Если включить, то даже огромное количество пауков на стенах будут получать урон в маленьких пространствах.

Рекомендуемое значение: true
Отвечает за то, тикают ли стойки для брони (обновляются ли они каждый тик).
Если выключить, стойки для брони не будут реагировать на воду и гравитацию (не падают, не плывут). Это снижает нагрузку на сервер.

Если какой-то плагин требует их работы, включите этот параметр обратно.
Рекомендуемое значение: false
Отключает проверки столкновений у стоек для брони.
Если выключить, стойки для брони не толкают другие сущности и сами не толкаются. Это снижает нагрузку, если на сервере много стоек.
Рекомендуемое значение: false
Как часто (в тиках) жители выполняют свои действия. Чем больше число, тем реже жители что-то делают, и тем меньше нагрузка на сервер.

Рекомендуемые значения:
behavior:
villager:
validatenearbypoi: 60 #Проверка ближайших точек интереса (рабочих мест, кроватей)
acquirepoi: 120 #Поиск новой точки интереса. Это самое тяжёлое действие жителя.
sensor:
villager:
secondarypoisensor: 80 #Второстепенные датчики точек интереса
nearestbedsensor: 80 #Поиск ближайшей кровати
villagerbabiessensor: 40 #Проверка детей жителей
playersensor: 40 #Проверка игроков рядом
nearestlivingentitysensor: 40 #Проверка ближайших живых существ
Если жители стали плохо находить дорогу к работе или кроватям, уменьшите
acquirepoi
Альтернативная система проверки соединения с игроком.
Обычный keepalive работает так:
Сервер проверяет связь с игроком, и если не получает ответ, то сразу его кикает.
Альтернативный keepalive:
Сервер проверяет связь каждую секунду, но отключает игрока только если тот не отвечал целых 30 секунд подряд. Из-за этого игрока не выкинет от одного случайного обрыва связи. Это полезно для игроков с плохим интернетом.
Не работает с TCPShield и NeoProtect
Рекомендуемое значение: true
Если TPS сервера падает ниже порога (настраивается в purpur.yml в параметре lagging-threshold), зомби перестают атаковать жителей. Это снижает нагрузку на сервер во время лагов.
Рекомендуемое значение: false
Разрешает или запрещает всем существам (кроме игроков) использовать порталы.

Если выключить, то зомби, коровы, стрелы и т.д. не смогут заходить в порталы. Это круто, потому что когда существо проходит через портал, сервер загружает чанки в другом мире и сильно лагает.
Рекомендуемое значение: false
Если включить, то "тупых" жителей (которые не могут найти дорогу к своей работе или кровати) превращает в овощей: у них отключается искусственный интеллект, они стоят на месте и только иногда обновляют свои товары. Это снижает нагрузку на сервер.
Включать только если жители реально лагают, иначе проверки на "тупость" сами создадут лаги
Рекомендуемое значение: true
Радиус, в котором жители ищут рабочие места и кровати.

Чем меньше радиус, тем меньше нагрузка на сервер. Если жители не могут найти свою работу или кровать — увеличьте эти числа.
Рекомендуемые значения:
acquire-poi: 16
nearest-bed-sensor: 16
Все знают, что если покормить дельфина рыбой, то он отведет вас к сокровищам. Эта функция отключает у дельфинов поиск сокровищ (структур, которые показывают карты сокровищ).

Снижает нагрузку на сервер, потому что дельфины перестают постоянно сканировать местность в поисках сундуков.
Рекомендуемое значение: true
Если игрок оказался за границей мира, сервер телепортирует его на спавн. Полезно, потому что стандартную границу мира можно обойти, а урон от неё не смертельный.

Если бы функция была отключена, то игрок мог бы выйти за границу мира, но получал бы урон
Рекомендуемое значение: true
Выключает возможность узнать плагины сервера через сторонние запросы. Уникально для bukkit.yml
Полезно для безопасности, но на производительность не влияет.
Рекомендуемое значение: false
Лимит мобов на игрока.
Не путать с
per-player-mob-spawnsвpaper.yml(там включается или выключается механика мобов на игрока, но не настраиваются цифры).

Рекомендуемые значения:
# Можно ставить значение 0, так вы уберете мобов этого типа совсем.
monsters: 20
animals: 5
water-animals: 2
water-ambient: 2 # Мелкие рыбы
water-underground-creature: 3
axolotls: 3
ambient: 1 # Летучие мыши
Как часто сервер пытается заспавнить мобов. Большое число = реже спавн = меньше нагрузка.
Рекомендуемые значения:
monster-spawns: 10
animal-spawns: 400
water-spawns: 400
water-ambient-spawns: 400
water-underground-creature-spawns: 400
axolotl-spawns: 400
ambient-spawns: 400
paper.ymlpaper.yml есть max-auto-save-chunks-per-tick, который управляет сохранением более гибко.paper.yml параметр delay-chunk-unloads-by.Удалите моды и плагины, которые не используются. Чем их меньше — тем меньше нагрузка на сервер.

Самые нагружающие плагины, которые стоит оптимизировать или удалить:
bukkit.yml.
Эти плагины только создают видимость пользы, а на деле жрут ресурсы или опасны
Для удаления предметов с земли. Их заменяют настройки в конфигурации (merge-radius и alt-item-despawn-rate), которые работают лучше. Такие плагины сами создают лаги, сканируя предметы.
Для стака мобов. Почти всегда бесполезны. Стакинг мобов создаёт больше лагов, чем если бы они не стакались, потому что сервер постоянно пытается спавнить новых. Единственное исключение — для спавнеров на серверах с кучей таких спавнеров.
Включающие/выключающие другие плагины. Очень опасны, потому что загрузка или выгрузка плагина на ходу может вызвать краш сервера.
Разработчики часто выпускают обновления, которые улучшают производительность и исправляют ошибки.
Убедитесь, что все плагины или моды совместимы между собой и с версией сервера. Несовместимые плагины могут вызывать ошибки и задержки.
У нас была история, когда клиент установил 2 похожих мода на анимацию персонажа. Из-за того, что моды накладывались друг на друга, анимация багалась.
Используйте инструменты мониторинга, такие как Spark или Timings, для анализа, какие плагины потребляют наибольшее количество ресурсов.


Размер мира самый главный параметр, который влияет на производительность вашего майнкрафт сервера.

Как его ограничить?
/worldborder center ~ ~/worldborder set 17000Чтобы избежать лагов, прогрузите чанки до того, как игроки начнут по ним бегать. Если хотите узнать, сколько места на диске займёт ваш уже прогруженный мир воспользуйтесь World Size Calculator.
Перед прогрузкой, обязательно установите границу мира, чтобы игроки не генерировали новые чанки
Чтобы сгенерировать мир заранее:
Установите плагин Chunky.
Введите команды в этой последовательности:
/chunky radius <число в блоках> — чтобы задать размер карты в каждую сторону.
/chunky world <название мира> - чтобы выбрать мир для прогрузки.
/chunky start - чтобы начать прогрузку.

Радиус 2000 блоков в каждую сторону, сгенерированный Chunky
Важно:
Если радиус большой, прогрузка может занять несколько часов.
На Paper TPS не просядет, но скорость загрузки упадёт, если процессор перегружен.
Верхний мир, Ад и Эндер — это отдельные миры с отдельными границами. Ад в 8 раз меньше Верхнего (если вы не меняли его датапаками), поэтому если вы поставите неправильный размер, игроки окажутся за границей мира.

Флаги запуска — это специальные параметры, которые добавляются в команду запуска сервера. Они настраивают Java, чтобы та лучше управляла памятью и реже собирала мусор (мусор — это ненужные данные, которые забивают оперативку).
Без этих флагов сервер будет чаще лагать и может упасть из-за нехватки памяти.
#!/usr/bin/env bash
while true; do
java -Xms8192M -Xmx8192M \
-XX:+UseG1GC \
-XX:+ParallelRefProcEnabled \
-XX:MaxGCPauseMillis=200 \
-XX:+UnlockExperimentalVMOptions \
-XX:+DisableExplicitGC \
-XX:+AlwaysPreTouch \
-XX:G1HeapWastePercent=5 \
-XX:G1MixedGCCountTarget=4 \
-XX:InitiatingHeapOccupancyPercent=15 \
-XX:G1MixedGCLiveThresholdPercent=90 \
-XX:G1RSetUpdatingPauseTimePercent=5 \
-XX:SurvivorRatio=32 \
-XX:+PerfDisableSharedMem \
-XX:MaxTenuringThreshold=1 \
-Dusing.aikars.flags=https://mcflags.emc.gs \
-Daikars.new.flags=true \
-XX:G1NewSizePercent=30 \
-XX:G1MaxNewSizePercent=40 \
-XX:G1HeapRegionSize=8M \
-XX:G1ReservePercent=20 \
-Dfile.encoding=UTF-8 \
-jar server.jar # Поменяйте имя на то, с помощью которого запускается ваш сервер. Например, paper-1.20.4.jar
echo Restarting in 5 seconds...
echo Press CTRL + C to cancel.
sleep 5
done
-Xms8192M и -Xmx8192M — сколько памяти выделяется серверу. Обе цифры должны быть одинаковыми. Вместо 8192 подставьте свою оперативку в мегабайтах (например, 4096 для 4 ГБ).
-XX:+UseG1GC — включает сборщик мусора G1. Он лучше подходит для серверов с большим количеством игроков.
-XX:MaxGCPauseMillis=200 — максимальная длительность паузы на сборку мусора в миллисекундах. 200 — оптимальный вариант.
-XX:DisableExplicitGC — отключает команду System.gc(), которую некоторые плагины дёргают вручную. Это полезно, потому что ручная сборка мусора только создаёт лаги.
-Dfile.encoding=UTF-8 — устанавливает кодировку. Без этого могут быть проблемы с русским текстом.
Остальные флаги из примера — это стандартные флаги Aikar. Их можно оставить как есть, они уже оптимизированы для Minecraft.
Сгенерируйте флаги под свои параметры в этом редакторе.

Скопируйте скрипт и вставьте его в свой файл запуска (start.bat для Windows или start.sh для Linux).
server.jar— это ядро сервера (файл, который запускает сервер). Например, paper-1.20.4.jar, purpur-1.20.4.jar или spigot-1.20.4.jar.