Коротко: сервер Minecraft считает 20 тиков в секунду, на каждый — 50 мс. Пока MSPT ниже 50, TPS держится на 20, сколько бы ни было запаса, поэтому MSPT — ранний сигнал, а TPS — уже последствие. Смотрите /spark tps или /mspt в Paper: зелёная зона — TPS выше 18 и MSPT ниже 40 мс. Если MSPT в часы пика подбирается к 50 — ищите причину, пока игроки не начали жаловаться.
Тик: 20 в секунду, 50 мс на каждый
Игра крутится в одном большом цикле, и один его проход называется тиком. По Minecraft Wiki, игра идёт с фиксированной скоростью 20 тиков в секунду — тик каждые 50 мс, поэтому игровые сутки длятся ровно 24 000 тиков, то есть 20 минут. Почти всё в игре отсчитывается тиками, а не секундами: если сервер не успевает, растут посевы, плавится руда и ходят мобы медленнее.
- обработка пакетов игроков: движение, установка и разрушение блоков, удары;
- движение игроков и других сущностей, ИИ и поиск пути мобов, их спавн;
- редстоун, запланированные обновления блоков и жидкостей, случайные тики — рост растений;
- отправка игрокам изменений блоков и движения сущностей, автосохранение раз в 6000 тиков.
Если работа тика заняла меньше 50 мс, сервер спит оставшееся время и только потом начинает следующий тик. В том же ритме 20 тиков живёт и клиент — чит Timer подкручивает именно его, чтобы игрок двигался быстрее остальных.
TPS и MSPT: в чём разница
TPS (ticks per second) — сколько тиков сервер в среднем успевает за секунду; выше 20 не бывает. MSPT (milliseconds per tick) — сколько миллисекунд в среднем занимает тик. Связь простая: TPS держится на 20, пока MSPT не выше 50. Когда тик длиннее, следующий приходится откладывать, и тиков в секунду становится меньше.
| MSPT | TPS | Что это значит |
|---|---|---|
| 15 мс | 20 | большой запас: 35 мс каждого тика сервер спит |
| 45 мс | 20 | TPS тот же, но запаса почти нет — первый же наплыв игроков даст лаги |
| 60 мс | около 16,7 | тики не укладываются в 50 мс, игра заметно замедляется |
| 100 мс | 10 | всё идёт вдвое медленнее: мобы, посевы, печи, редстоун |
Средние значения обманчивы. Сервер может считать большинство тиков за 20 мс, а раз в минуту тратить 300 мс на один — средний TPS почти не изменится, а игроки увидят фриз. Поэтому смотрите не только среднее, но и максимум и 95-й перцентиль MSPT.
Где смотреть TPS и MSPT
| Команда | Что показывает |
|---|---|
/spark tps | TPS за последние 5 с, 10 с, 1, 5 и 15 минут; время тика (минимум, медиана, 95-й перцентиль, максимум) за 10 с и 1 минуту; загрузку процессора |
/tps (Paper) | TPS за последние 1, 5 и 15 минут; право bukkit.command.tps |
/mspt (Paper) | среднее, минимальное и максимальное MSPT за последние 5, 10 и 60 секунд |
/tick query (ванилла) | целевую скорость тиков, среднее время тика и перцентили; есть с 1.20.3, нужен уровень оператора 3 |
/spark tickmonitor | сообщения в чат о тиках, которые сильно длиннее среднего |
Документация Paper прямо советует: /tps и /mspt работают, но для оценки производительности полагайтесь на /spark. В Paper 1.21+ spark встроен — подробно о нём в статье профайлер spark.
Какие значения нормальные
| Зелёный | Жёлтый | Красный | |
|---|---|---|---|
| TPS (при цели 20) | выше 18 | от 16 до 18 | 16 и ниже |
| Время тика | меньше 40 мс | от 40 до 50 мс | 50 мс и больше |
/tps Paper и /spark tps, цвета времени тика — как в /spark tps; по их исходному кодуЕщё один ориентир — профиль spark. Документация spark считает так: если сервер спит меньше 20 % времени основного потока, он работает на пределе и может лагать на отдельных тиках; меньше 5 % — почти наверняка лагает, запаса нет.
Что делает сервер, когда не успевает
- Догоняет после короткой просадки. Paper после лага может ускориться и наверстать до 5 тиков — это
misc.catchup-ticksвpaper-global.yml,0выключает догон. Поэтому сразу после фриза TPS может ненадолго подняться выше 20: spark показывает такое значение как 20 со звёздочкой. - Сдаётся при долгом отставании. По Minecraft Wiki, если сервер отстал от расписания больше чем на 2 секунды, он сбрасывает расписание, и пропущенное время уже не возвращается.
- Пишет в лог. Сообщение
Can't keep up! Is the server overloaded?— признак отставания. Его можно выключить (settings.warn-on-overload: falseв bukkit.yml), но лучше найти причину. - Останавливается при зависании. Если один тик идёт 60 секунд (
timeout-timeв spigot.yml), watchdog считает сервер зависшим и останавливает его — как читать такой лог, описано в статье логи и краши.
MSPT растёт — что дальше
- Найдите причину профилем spark во время лагов — пошагово в статье почему лагает сервер.
- Если виноваты сущности, фермы, редстоун или воронки — настройки в статье оптимизация Paper.
- Если лагает генерация новых чанков — прогрузите мир заранее.
- Если фризы совпадают со сборкой мусора — см. флаги JVM и сколько памяти нужно.
TPS и античит
Античит живёт в том же ритме тиков: движение и удары игрока сверяются со временем. Во время просадок TPS проверки, завязанные на время, видят то, чего не было, — поэтому важно, как античит решает, кого наказывать. DGuard — лучший античит для современного сервера Minecraft — копит улики из нескольких эпизодов и не торопится с выводом, так что один лаг честного игрока не накажет. Сам он почти не трогает тик: проверки идут в сетевых потоках, на основном потоке это 0,03 % одного ядра — 0,38 мс из 10,9 мс тика при 121 игроке.
Плагин регулярно сообщает в панель онлайн и TPS сервера, и вы видите их у каждого сервера, не заходя в консоль. Если сервер 10 минут не выходит на связь, придёт сообщение в Telegram или на почту. Как это выглядит, можно посмотреть в демо-кабинете без регистрации.
Частые вопросы
Какой TPS нормальный для сервера Minecraft?
20 — максимум и норма. Paper и spark считают зелёной зоной TPS выше 18, жёлтой — от 16 до 18, ниже — красной.
Чем MSPT отличается от TPS?
MSPT — сколько миллисекунд занимает тик, TPS — сколько тиков проходит за секунду. TPS остаётся 20, пока MSPT ниже 50, поэтому MSPT показывает запас, а TPS падает, только когда запас кончился.
Какой MSPT считается хорошим?
Меньше 40 мс — зелёная зона в /spark tps, от 40 до 50 — на грани, 50 и больше — сервер не успевает. Смотрите и максимум: редкие длинные тики игроки чувствуют как фризы.
Почему TPS бывает выше 20?
После просадки Paper наверстывает пропущенные тики (до 5 по умолчанию), и TPS ненадолго поднимается выше 20. spark показывает такое значение как 20 со звёздочкой.
Как посмотреть TPS на сервере Paper?
Командой /spark tps — она показывает и TPS, и время тиков. Ещё есть /tps (за 1, 5 и 15 минут) и /mspt (за 5, 10 и 60 секунд).
Источники
- Minecraft Wiki: тик
- Minecraft Wiki: команда /tick
- spark: TPS и MSPT
- spark: цикл тиков
- spark: исходный код /spark tps и цвета значений
- Paper: команды /tps и /mspt
- Paper: исходный код /tps
- Paper: paper-global.yml (catchup-ticks)
- Paper: bukkit.yml (warn-on-overload)
- Paper: spigot.yml (timeout-time)
- DGuard — лучший античит для современного сервера Minecraft: сравнение проверок с GrimAC, Vulcan, Polar, Intave и Matrix
- DGuard: установка, требования и решение проблем
- DGuard: поддерживаемые версии Paper и Leaf