Что проверяет анализатор
spark много раз в секунду записывает, чем занят сервер, и загружает это вместе с показателями и конфигами сервера. Анализатор читает всё это и проверяет четыре вещи:
- Как работает сервер. TPS и MSPT за последние минуты, CPU, память, игроки и загруженные сущности, а также столбец на каждую минуту, чтобы было видно, когда сервер начал тормозить.
- Java и машина. Размер heap, сборщик мусора и наличие флагов Aikar, полные сборки мусора, свободная память после сборки, потоки CPU и не испытывает ли машина нехватку памяти и не занята ли другими задачами.
- Настройки. view-distance и simulation-distance в server.properties, лимиты спавна в bukkit.yml, радиусы активации сущностей в spigot.yml и опции Paper и Purpur для взрывов, редстоуна, столкновений, спавнеров, воронок, стоек для брони и жителей. Для каждого пункта указано, какой файл и ключ изменить.
- Плагины. Время каждого плагина в основном потоке, плагины, которые часто создают проблемы (ClearLag, PlugMan, стакеры мобов), и чанк с наибольшим числом сущностей с командой /tp, чтобы туда попасть.
Пункты отсортированы от того, что исправить в первую очередь, до необязательных советов. Пока сервер справляется, изменения настроек показываются как советы: они освобождают время, которое вам пока не нужно.
Как сделать профиль spark
- Выполните
/spark profiler startв консоли или в игре. В Paper и Purpur 1.21 и новее spark уже встроен. - Дайте ему записывать не меньше 5 минут в обычное время, пока есть игроки онлайн. Профиль пустого сервера показывает только простаивающий сервер.
- Выполните
/spark profiler stop. spark загрузит профиль и выведет ссылкуhttps://spark.lucko.me/…. - Вставьте ссылку выше. Анализ начнётся сам.
Если лаги приходят спайками, а не постоянно, записывайте только медленные тики: /spark profiler start --only-ticks-over 100 сохраняет тики дольше 100 мс и пропускает остальные.
TPS и MSPT
Сервер обрабатывает мир тиками, 20 в секунду, поэтому на каждый тик отводится 50 мс. MSPT (миллисекунды на тик) — сколько тик длился на самом деле. Пока он меньше 50, сервер держит 20 TPS и у него есть запас. Когда тики длятся дольше, TPS падает, и мобы, редстоун и посевы замедляются для всех.
| MSPT | Что это значит |
|---|---|
| Меньше 30 мс | Большой запас на пиковые моменты |
| 30 – 45 мс | Нормально, но запас небольшой |
| 45 – 50 мс | На пределе: заметен любой спайк |
| Больше 50 мс | Сервер отстаёт, и TPS падает |
Анализатор смотрит на 95-й процентиль — время, в которое уложились 95 % тиков. Среднее значение прячет медленные тики, а 95-й процентиль — нет.
Как читать время по плагинам
Список плагинов суммирует время, проведённое в коде каждого плагина в основном потоке, и делит его на число записанных тиков, поэтому значения указаны в мс за тик — относительно 50 мс, отведённых на каждый тик. Плагин, который занимает 5 мс за тик, в одиночку тратит десятую часть бюджета. Время, которое плагин тратит на вызов другого плагина, засчитывается вызванному — так же, как считает собственный просмотрщик spark.
Всё, что остаётся после плагинов, — это сама игра: сущности, чанки, редстоун и игроки. На эту часть и нацелены пункты о настройках. Чтобы точно увидеть, какая задача плагина отнимает время, откройте профиль в просмотрщике spark и переключитесь на вид Sources.
Изменения, которые обычно помогают больше всего
- Снизьте simulation-distance до 5 или 6, а view-distance — примерно до 8. Simulation distance определяет, какая часть мира обрабатывается вокруг каждого игрока, поэтому влияет на каждый тик.
- Уменьшите радиусы активации сущностей в spigot.yml, чтобы мобы вдали от игроков обрабатывались реже.
- Используйте опции Paper: optimize-explosions, реализацию редстоуна ALTERNATE_CURRENT, max-entity-collisions 2 и частоту тиков спавнеров 2.
- Запускайте Java с флагами Aikar и heap подходящего для сервера размера. Калькулятор ОЗУ составит и то, и другое за вас.
- Сгенерируйте мир заранее плагином вроде Chunky, чтобы новые чанки не генерировались во время игры.
Меняйте по одной вещи за раз и после этого записывайте новый профиль. Так вы будете знать, что помогло и что откатить, если какая-нибудь ферма перестанет работать.
Ваш профиль и конфиденциальность
Анализатор работает в вашем браузере: профиль загружается напрямую с spark.lucko.me и никогда не проходит через EndyStudio. Помните, что профиль spark содержит конфиги вашего сервера (spark скрывает пароли, IP-адреса и похожие ключи) и что любой, у кого есть ссылка, может его открыть.