Сервер Minecraft просчитывает мир 20 раз в секунду: это и есть TPS (ticks per second, тиков в секунду). Если он не успевает, TPS опускается ниже 20, и всё происходит как в замедленной съёмке: блоки ломаются дольше, мобы дёргаются, фермы дают сбои. Это лаги сервера, и это не то же самое, что пинг (ваше соединение).
1. Прежде чем что-то менять, измерьте
В последних версиях Paper spark уже встроен (в старых установите его как плагин):
/spark tps: TPS и MSPT (сколько миллисекунд занимает каждый тик). Ниже 50 мс — запас есть; если больше 50 мс, TPS начинает падать./spark profiler start, а через несколько минут, пока на сервере играют, —/spark profiler stop: вы получите ссылку на отчёт о том, что съедает время (плагин, ферма, сущности…).
Если в консоли часто появляется Can't keep up! Is the server overloaded?, сервер не успевает. При запуске это нормально; если сообщение появляется постоянно, читайте дальше и проверьте также потребление ресурсов вашего VPS.
2. Используйте Paper, а не официальный сервер
Paper (или его форки, например Purpur) исправляет многие проблемы с производительностью сервера Mojang, не меняя саму игру. Если вы играете с модами (Fabric, Forge, NeoForge), Paper не подойдёт; для Fabric производительность заметно повышает мод Lithium.
3. Рекомендуемая команда запуска
Документация Paper рекомендует так называемые флаги Aikar: они настраивают, как Java освобождает память, чтобы не было подтормаживаний. Для VPS с 8 ГБ и Linux (6,5 ГБ для Minecraft):
java -Xms6500M -Xmx6500M -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -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 -jar paper.jar --nogui
Меняйте только первые два значения в зависимости от объёма памяти (как его рассчитать). Если вы выделяете больше 12 ГБ, в документации Paper некоторые значения отличаются: воспользуйтесь её генератором команды запуска.
Больше RAM — не значит быстрее. Почти всю работу Minecraft выполняет на одном ядре процессора. Когда памяти уже хватает, её увеличение TPS не поднимет.
4. Уменьшите дальность
В server.properties:
simulation-distance: на каком расстоянии вокруг каждого игрока «работает» мир (мобы, посевы, редстоун). Этот параметр нагружает сервер сильнее всего: значения от 6 до 8 подходят почти для всего.view-distance: дальность прорисовки. Значения от 8 до 10 — хороший баланс.
5. Сгенерируйте мир заранее
Генерация нового ландшафта, пока игроки исследуют мир, — одна из самых тяжёлых задач, особенно при полётах на элитрах. С плагином Chunky мир можно сгенерировать заранее, лучше всего — когда на сервере никого нет:
/worldborder set 10000
/chunky radius 5000
/chunky start
Граница мира не даёт генерировать ландшафт за пределами заранее созданной области.
6. Что чаще всего вызывает лаги
- Слишком много сущностей: огромные фермы, скопления животных, предметы, валяющиеся на земле.
- Зацикленный редстоун: «часы», которые никогда не останавливаются.
- Тяжёлые или плохо написанные плагины: отчёт spark покажет, какой именно.
- Мир без предварительной генерации, который одновременно исследуют много игроков.
Если после всего этого процессор VPS по-прежнему загружен на 100 %, когда на сервере играют, значит, серверу уже тесно на текущем тарифе: улучшите тариф — переносить ничего не придётся.