-
Автор темы
- #1
В двух предыдущих статьях был полный разбор запуска Minecraft сервера на ядре Paper. Но что делать, если железо слишком слабое, или на сервере слишком много игроков? В этой статье мы рассмотрим способы оптимизации пейпер сервера minecraft.
Производительность майнкрафт серверов измеряется в TPS — Ticks per seconds — тиках в секунду. Максимальный и идеальный показатель тпс — 20. Тпс может понижаться при нагрузке на сервер. Для того чтобы узнать его значение, нужно ввести команду /tps.
Значения ТПС:
- 16 и ниже — ужасная производительность, значительные лаги
- 16-18.5 — плохая производительность, но лаги чувствуются не так сильно
- 18.5-19.93 — средняя производительность, лаги почти незаметны
- 19.93-19.99 — отличная производительность, лаги не чувствуются. На большинстве крупных серверов значение тпс имеет значение именно в этом диапазоне
- 20 — идеальный показатель
Оптимизация сервера
1) Плагины
Spark
Для выяснения причины лагов необходим профайлер. Лучшим профайлером для серверов является Spark. Spark — это многофункциональный плагин, позволяющий детальнее мониторить загрузку сервера и составлять подробный отчёт о том, что именно его нагружает.
Для теста я построил такую лаг-машину:
В ней находится 600 вагонеток. Просадить тпс на моём тестовом сервере она смогла до 7:
Теперь я запускаю профайлер командой /spark profiler.
Спарк собирает информацию и анализирует загрузку сервера. Обычно бывает достаточно десяти минут профайлинга, на тестовом сервере я выделил на это всего минуту. Остановить этот процесс можно командой /spark profiler --stop. В чат будет отправлена ссылка на результат. переходим и видим полную картину:
Наибольшее тик-время отнимает обработка Entity.move.
Clearlaggs
Исправить такую лаг-машину можно, удалив её и все находящиеся в ней вагонетки. А чтобы найти её в мире, понадобится плагин ClearLaggs, способный искать чанки, которые больше всего влияют на ТПС.
Устанавливаем плагин, поместив его в папку Plugins и перезагружаем сервер
Теперь нам доступен большой функционал для борьбы с лагами, а в частности — команда /lagg chunk, которая выводит список наиболее нагруженных чанков с их координатами
и /lagg tpchunk, позволяющая телепортироваться на этот чанк, введя его координаты
Быстро удалить все вагонетки можно командой /kill @e[type=minecart,r=10], где type — вид сущности, а r — радиус удаления.
Worldedit
Большие падения производительности может вызывать использование устаревшего плагина WorldEdit, который не способен на асинхронную работу и выполнение в отдельном потоке. Особенно заметным это становится при изменении больших территорий. В этом случае незаменимым является FastAsyncWorldEdit. Из преимуществ:
- Чрезвычайная кастомизируемость
- Использование минимального количества ресурсов сервера
- Безопасность использования
- Высокая скорость даже в самом медленном режиме
Основной функционал FAWE:
- Более 200 команд
- Поддержка веб-панели
- Бесконечная команда //undo
- Расширенные лимиты на игроков
- CFI-команды для создания новых миров
- Мгновенное копирование произвольного размера командой //lazycopy
- Автоматическое восстановление частично повреждённых файлов Schematic
- Смешивание биомов, импорт изображений, создание пещер, визуализация схематик и многое другое
FAWE справился с этим чуть более, чем за 3 секунды
тогда как обычный WorldEdit, по моему опыту, уже бы полностью положил сервер.
Этот самый кусок:
Chunky
- Поддержка многоядерной генерации
- Возможность приостановки процесса
- Подробный вывод информации о состоянии текущей задачи генерации
- /worldborder center 0 0
- /worldborder set 10000
- /chunky worldborder
- /chunky start
2) Конфигурация
Paper
Настройки ядра пейпер хранятся в файле paper.yml, и большое количество значений там можно оптимизировать:
max-auto-save-chunks-per-tick
— частота сохранения чанков. Оптимизированное значение — 8optimize-explosions
— использование методов Paper для просчёта взрывов. Оптимизированное значение — truemax-entity-collisions
— количество обрабатываемых столкновений за тик. Оптимизированное значение — 2grass-spread-tick-rate
— частота попыток распространения травы. Оптимизированное значение — 4despawn-range
— радиус от игроков, на котором начинают удаляться мобы. Оптимизированное значение: soft — 28, hard — 96use-faster-eigencraft-redstone
— улучшенный редстоун-алгоритм, не меняющий ванильные механики. Оптимизированное значение — trueper-player-mob-spawns
— распределение спавна мобов на каждого игрока. Оптимизированное значение — true
Spigot
Spigot.yml — файл, генерируемый по умолчанию.
entity-activation-range
— дистанция активации интеллекта мобов. Оптимизированные значения: animals — 24, monsters — 24, raiders (с версии 1.14) — 48, misc — 8merge-radius
— радиус слияния предметов на земле. Оптимизированные значения: item — 4, xp — 6view-distance
— количество чанков, отправляемых игроку при прорисовке. Оптимизированное значение — 8
Bukkit
Bukkit.yml — файл, генерируемый по умолчанию.
chunk-gc
— частота выгрузки пустых чанков. Оптимизированное значение — 400autosave
— частота автосохранения. Оптимизированное значение — 9000
На этом основная информация по оптимизации заканчивается. Возможно, статья будет дополняться.