Для тех, у кого сервер «лагает», а что именно тормозит, непонятно. Порядок простой: сначала измерить, потом крутить. Без замера можно неделю менять конфиги и так и не попасть в причину.
Лаги сервера и низкий FPS у игрока - разные вещи. Если тормозит картинка у одного человека, а у остальных всё плавно, проблема на его стороне.
/spark tps показывает TPS и MSPT, /spark health - нагрузку на процессор и память. Профайлер запускайте, когда лагает, и держите несколько минут. После stop spark даст ссылку на отчёт в браузере. Разворачивайте Server thread и смотрите, что съедает больше всего: конкретный плагин, тики сущностей, загрузка чанков, хопперы.
Если лаги не постоянные, а пиками, запустите профайлер с флагом
У /worldborder set указывается диаметр, поэтому радиусу 5000 соответствует 10000. Генерация идёт долго, запускайте её до открытия или ночью на пустом сервере. Ад и Энд тоже стоит прогнать. Процесс можно приостановить командой /chunky pause и продолжить /chunky continue.
Для запуска используйте флаги Aikar, это проверенный набор настроек сборщика мусора G1 под Paper.Если выделяете больше 12 ГБ, меняются пять значений: G1NewSizePercent=40, G1MaxNewSizePercent=50, G1HeapRegionSize=16M, G1ReservePercent=15, InitiatingHeapOccupancyPercent=20.
Вопросы по теме — пишите ниже, ответим.
TPS и MSPT
Сервер обсчитывает мир 20 раз в секунду, это 20 TPS. На один тик отведено 50 миллисекунд. Сколько тик занимает на самом деле, показывает MSPT. Пока MSPT ниже 50, TPS держится на 20 и всё в порядке. Когда тик перестаёт укладываться в 50 мс, TPS падает, и игроки видят лаги: блоки возвращаются, мобы телепортируются, двери открываются с задержкой.Лаги сервера и низкий FPS у игрока - разные вещи. Если тормозит картинка у одного человека, а у остальных всё плавно, проблема на его стороне.
Шаг 1: spark
spark - профайлер, который показывает, на что уходит время тика. В свежих версиях Paper он встроен, на других ядрах ставится как плагин.Код
/spark tps
/spark health
/spark profiler start
/spark profiler stopЕсли лаги не постоянные, а пиками, запустите профайлер с флагом
--only-ticks-over 100: в отчёт попадут только тики длиннее 100 мс.Шаг 2: дальность прорисовки и симуляции
В server.properties есть два ключа, которые сильнее всего влияют на нагрузку:- view-distance - сколько чанков вокруг игрока отправляется ему для отображения;
- simulation-distance - в каком радиусе мир живёт: растут растения, двигаются мобы, работают механизмы.
Шаг 3: предгенерация мира
Генерация новых чанков - одна из самых тяжёлых операций. Когда игроки бегут по нетронутой карте или летают на элитрах, сервер генерирует мир на лету, и TPS проседает. Решение: сгенерировать мир заранее плагином Chunky и ограничить его границей.Код
/chunky world world
/chunky center 0 0
/chunky radius 5000
/chunky start
/worldborder center 0 0
/worldborder set 10000Шаг 4: сущности и фермы
В отчёте spark часто на первом месте сущности: стада животных, фермы жителей, тысячи предметов на земле, хопперы.- Лимиты спавна мобов задаются в bukkit.yml, блок spawn-limits.
- В spigot.yml есть entity-activation-range: мобы дальше этого радиуса обрабатываются реже.
- В paper-world-defaults.yml много настроек для сущностей, предметов и хопперов, например лимит определённых сущностей, которые сохраняются в чанке.
- Жители - отдельная боль. В Purpur есть опция, которая упрощает поведение жителей, запертых в торговых ячейках.
- Ограничение животных на чанк ставьте плагином и пишите о нём в правилах заранее, а не после того, как у игрока исчезло стадо.
Шаг 5: запуск и память
Больше памяти не значит быстрее. Ставьте -Xms и -Xmx одинаковыми и оставляйте запас системе: ОС, база данных и прокси тоже хотят память. В панелях хостинга лимит контейнера должен быть выше -Xmx: Java тратит память и сверх хипа, и при лимите впритык процесс могут убить без понятной ошибки в логе.Для запуска используйте флаги Aikar, это проверенный набор настроек сборщика мусора G1 под Paper.
Флаги Aikar, пример для 10 ГБ
Код
java -Xms10G -Xmx10G -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Шаг 6: железо
Основной тик Paper считается в одном потоке, поэтому важна скорость одного ядра, а не количество ядер. Дешёвый VPS с восемью слабыми ядрами нередко проигрывает машине с четырьмя быстрыми. При выборе хостинга смотрите на модель и частоту процессора, NVMe-диски и расположение дата-центра поближе к игрокам. Если хостинг не называет модель процессора, это повод насторожиться.Чего не делать
- Не используйте /reload, перезапускайте сервер целиком. После reload плагины текут памятью и ведут себя непредсказуемо.
- Не ставьте «оптимизирующие» плагины вслепую, не посмотрев в spark, что тормозит.
- Не меняйте десять настроек сразу. Одна правка, замер, следующая правка.
Вопросы по теме — пишите ниже, ответим.