Как поднять TPS на Minecraft сервере: руководство по устранению лагов
Пошаговая инструкция по поиску причин просадки TPS: диагностика через spark, оптимизация мобов, воронки, редстоун и правильные флаги Java.
Каждый владелец сервера Minecraft сталкивается с ситуацией, когда показатель TPS (Ticks Per Second) падает с идеальных 20.0 до 15.0 или ниже. Игроки начинают жаловаться на задержки, зависание мобов и лаги при ломании блоков.
В этом руководстве разберем, как найти точный источник нагрузки и вернуть стабильные 20 TPS.
1. Что такое TPS и MSPT?#
- TPS (Ticks Per Second): Количество игровых тактов в секунду. Норма — ровно 20.0.
- MSPT (Milliseconds Per Tick): Время, за которое сервер обрабатывает один такт.
- Если MSPT < 50 мс, сервер выдает стабильные 20 TPS.
- Если MSPT > 50 мс, сервер не успевает рассчитывать мир вовремя и TPS начинает падать.
| Показатель MSPT | Состояние сервера | Итоговый TPS |
|---|---|---|
| 0 – 35 мс | Отлично, есть запас мощности | 20.0 |
| 35 – 50 мс | Нагрузка высокая, но стабильно | 20.0 |
| 50 – 75 мс | Сервер перегружен, заметны лаги | 13.0 – 19.0 |
| > 100 мс | Критическое состояние, сильные фризы | < 10.0 |
2. Диагностика через spark profiler#
Не пытайтесь оптимизировать сервер вслепую. Установите бесплатный плагин spark и запустите анализ:
# Запустить профилирование нагрузки
/spark sampler --timeout 60По окончании таймера вы получите ссылку на интерактивный веб-отчет. Обратите внимание на следующие узлы:
world - entityTick: говорит о том, что лаги создают мобы или жители.world - tileEntityTick: лаги вызваны воронками (hoppers), сундуками или механизмами.world - doChunkUnload / doChunkMap: медленная работа диска или генерация чанков.
3. Оптимизация воронки и тайл-сущностей#
Воронки (Hoppers) — один из самых тяжелых элементов в Minecraft, так как каждая воронка проверяет пространство над собой на наличие предметов каждый такт.
В файле paper-world-defaults.yml настройте параметры:
hopper:
disable-move-event: true
ignore-occluding-blocks: trueСовет: Включение
disable-move-event: trueотключает вызов события InventoryMoveItemEvent для плагинов защиты, что снижает нагрузку от воронок в 3–5 раз.
4. Оптимизация спавна и тиков сущностей#
Большие скопления мобов на фермах и в деревнях жителей вызывают экспоненциальный рост нагрузки.
В spigot.yml:
world-settings:
default:
entity-activation-range:
animals: 16
monsters: 24
raiders: 32
misc: 8
water: 8
villagers: 16В paper-world-defaults.yml:
entities:
armor-stands:
tick: false
spawning:
per-player-mob-spawns: trueПараметр per-player-mob-spawns: true распределяет лимит спавна мобов индивидуально по каждому игроку, предотвращая спавн тысяч мобов в одной точке карты.
5. Предгенерация мира (Chunky)#
Если игроки часто исследуют мир, сервер тратит процессорное время на вычисление структуры чанков и пещер.
- Установите плагин Chunky.
- Задайте границу мира:
/worldborder set 6000. - Запустите предварительную генерацию:
/chunky radius 3000и/chunky start.
6. Оптимизированные флаги запуска Java (Aikar's Flags)#
Использование Aikar's Flags для сборщика мусора G1GC помогает избавиться от микрофризов при сборке мусора в оперативной памяти:
java -Xms4G -Xmx4G \
-XX:+UseG1GC \
-XX:+ParallelRefProcEnabled \
-XX:MaxGCPauseMillis=200 \
-XX:+UnlockExperimentalVMOptions \
-XX:+DisableExplicitGC \
-XX:+AlwaysPreTouch \
-XX:G1NewSizePercent=30 \
-XX:G1MaxNewSizePercent=40 \
-XX:G1ReservePercent=20 \
-jar paper.jar --noguiКстати: На хостинге Obsy Host флаги Aikar's Flags настроены и применяются автоматически по умолчанию для каждого сервера — вручную прописывать параметры JVM не нужно.
Итог#
- Найдите причину лагов через /spark.
- Ограничьте радиус активации сущностей (
entity-activation-range). - Оптимизируйте воронки (
disable-move-event: true). - Предгенерируйте мир с помощью Chunky.
- Используйте Aikar's флаги JVM (на Obsy Host они активны по умолчанию).