Сборки серверов

СливПлатные

Сейчас онлайн

  • Gamesense
  • Aezzakmi
  • Abdolbys
  • Axelchikk
  • C3n0s1CK
  • AkatSireev
  • meowl_boostik
  • azharifarid
  • RishavTheOG
  • sapphir.0v
  • AlekseykaSanyka
  • Nettix
  • Fireless
  • milkaaa
  • Vova123456789co
  • mqurt
  • Fakto
  • googlikmr
  • Frixx_x
  • sshanslandass03
  • smilebobik2
  • Tzaka
  • xvj
  • artemka231
  • HasMine
  • dorbik
  • MrWeebeez
  • tigrcraft
  • chixi
  • bobur13
  • Fudsfhsdijf
  • Aibek
  • wick
  • gfewokweokgfwoepfwe
  • asdwadzsad
  • pandamimecraftmail
  • makaruto
  • Ashasegor
  • zlfeixiang
  • #bywanthh
  • soulknightteam
  • arsenii.demin
  • nursasdads
  • malis666
  • wexflugernew
  • Unfaths
  • ShockRaises
  • nik234442
  • rabinya111
  • mrmesniy
  • tyyyty6
  • Dziobak
  • IntoTheSky
  • AlexKane
  • motyaqq

Современные подходы к оптимизации аргументов JVM для Minecraft-серверов (Аргументы запуска для Minecraft)


ОПТИМИЗАЦИЯ JVM ДЛЯ MINECRAFT
Полное руководство по настройке Java Virtual Machine для серверов и клиентов



📋 СОДЕРЖАНИЕ

  1. Введение и основы
  2. Особенности настройки на Pterodactyl
  3. Выбор JRE: какую Java использовать?
  4. Выбор JVM: HotSpot vs OpenJ9
  5. Флаги Aikar — универсальный стандарт
  6. Продвинутые базовые флаги (brucethemoose)
  7. Оптимизация сборки мусора (GC)
  8. G1GC: клиент и сервер
  9. Shenandoah GC: лучший выбор для клиента
  10. ZGC: для мощных серверов
  11. GraalVM Enterprise Edition
  12. Настройка памяти
  13. Large Pages
  14. Аргументы JVM в официальном лаунчере
  15. Исследование UltimateBoomer
  16. Оптимизация для систем с малым объёмом ОЗУ
  17. Дополнительные советы по производительности
  18. Полезные инструменты и ссылки



I.ВВЕДЕНИЕ

Оптимизация аргументов Java Virtual Machine (JVM) стала неотъемлемой частью настройки серверов Minecraft. Грамотно подобранные параметры позволяют:

  • Улучшить производительность (TPS на сервере, FPS на клиенте)
  • Снизить задержки и избавиться от микрофризов
  • Оптимизировать использование оперативной памяти
  • Ускорить генерацию чанков
  • Не заменят оптимизирующие моды (Spark, Sodium, Lithium и т.д.)

⚠ Важно понимать: Эти твики заметно снижают задержки и фризы, но дают лишь умеренный прирост TPS и минимальный прирост среднего FPS. Для максимального FPS важнее актуальные драйверы GPU и перформанс-моды.



II.ОСОБЕННОСТИ НАСТРОЙКИ НАPTERODACTYL

pterodactyl_logo_transparent.png


При использовании панели Pterodactyl необходимо учитывать критически важный момент:

❗ Параметр -Xms (минимальная память) НЕ должен быть равен -Xmx (максимальной)!

Рекомендуется устанавливать Xms на 1–1.5 ГБ меньше, чем Xmx. Это защищает сервер от вмешательства системы OOMKiller (Out Of Memory Killer), которая может принудительно завершить процесс.

Пример: При Xmx=8G → устанавливайте Xms=6G или Xms=7G

На всех остальных платформах (VDS, выделенный сервер, локально) рекомендуется устанавливать Xms = Xmx, чтобы минимизировать накладные расходы на сборку мусора.



III.ВЫБОР ВЕРСИИ JAVA (JRE)

Какую версию Java использовать?

  • Java 21 — актуальная LTS-версия, рекомендуется для Minecraft 1.20.5+
  • Java 17 — рекомендуется для Minecraft 1.16.5–1.20.4 и большинства модов
  • Java 11 — если Java 17 несовместима с вашими модами
  • Java 8 — только для Minecraft 1.12.2 и ниже

Откуда скачать JRE?

JRE от Azul, Microsoft, Adoptium, Amazon и других вендоров в целом идентичны. Но есть исключения:

  • Oracle GraalVM Enterprise Edition — наиболее агрессивный JIT-компилятор. Даёт до 20%+ прироста при генерации чанков на сервере. (подробнее — в разделе GraalVM)
  • Adoptium (AdoptOpenJDK) — надёжный, широко совместимый выбор по умолчанию: adoptium.net
  • Intel Clear Linux OpenJDK — тот же код OpenJDK, но сборка оптимизирована для новых CPU. Только через Clear Linux репозитории.
  • Azul Prime OpenJDK — очень быстрый (hooks into LLVM), но несовместим с большинством модов. Только Linux.
  • Red Hat OpenJDK 8 — единственная Java 8 сборка с поддержкой Shenandoah GC.
  • IBM OpenJ9 — экономит ОЗУ, но в тестах более чем на 30% медленнее при генерации чанков.

💡 Не знаете что выбрать? Берите GraalVM EE для максимальной производительности, или Adoptium Java 17 JRE для надёжности и простоты.



IV.ВЫБОР JVM: HOTSPOT vs OPENJ9

HotSpot (стандарт)

  • Высокая производительность в рантайме
  • Поддерживает Shenandoah GC и ZGC
  • Совместим со всеми модами и версиями Minecraft
  • Потребляет больше оперативной памяти

OpenJ9 (IBM)

  • Значительно меньшее потребление ОЗУ
  • Быстрее стартует
  • Более 30% медленнее при генерации чанков
  • Больше колебаний FPS
  • Некоторые старые версии Forge несовместимы
  • Использует другие флаги (не совместимы со стандартными)

Лучший GC для OpenJ9: -Xgcpolicy:gencon — по производительности сопоставим с G1GC.

Вывод: Если у вашей системы достаточно ОЗУ — используйте HotSpot с Shenandoah. OpenJ9 — только при острой нехватке памяти.



V.ФЛАГИAIKAR— УНИВЕРСАЛЬНЫЙ СТАНДАРТ

Aikar предложил набор JVM-аргументов, ставший де-факто стандартом для серверов Minecraft. Эти параметры обеспечивают хорошую производительность и масштабируемость на любом железе.

Базовые флаги (до 12 ГБ памяти):

Java:
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 \
  -jar server.jar nogui

Дополнительные параметры при памяти более 12 ГБ:

Замените соответствующие флаги на следующие значения:

  • -XX:G1NewSizePercent=40
  • -XX:G1MaxNewSizePercent=50
  • -XX:G1HeapRegionSize=16M
  • -XX:G1ReservePercent=15
  • -XX:InitiatingHeapOccupancyPercent=20

🛠 Удобный генератор: Используйте Minecraft Flags Generator — Birdflop — инструмент автоматически учитывает объём памяти и платформу (в т.ч. Pterodactyl).



VI.ПРОДВИНУТЫЕ БАЗОВЫЕ ФЛАГИ

Источник: brucethemoose/Minecraft-Performance-Flags-Benchmarks

Эти флаги протестированы в бенчмарках и работают с любой Java 11+. Применяются как к серверу, так и к клиенту. Их необходимо дополнять флагами выбранного GC (см. ниже).

Java:
-XX:+UnlockExperimentalVMOptions
-XX:+UnlockDiagnosticVMOptions
-XX:+AlwaysActAsServerClassMachine
-XX:+AlwaysPreTouch
-XX:+DisableExplicitGC
-XX:+UseNUMA
-XX:NmethodSweepActivity=1
-XX:ReservedCodeCacheSize=400M
-XX:NonNMethodCodeHeapSize=12M
-XX:ProfiledCodeHeapSize=194M
-XX:NonProfiledCodeHeapSize=194M
-XX:-DontCompileHugeMethods
-XX:MaxNodeLimit=240000
-XX:NodeLimitFudgeFactor=8000
-XX:+UseVectorCmov
-XX:+PerfDisableSharedMem
-XX:+UseFastUnorderedTimeStamps
-XX:+UseCriticalJavaThreadPriority
-XX:ThreadPriorityPolicy=1
-XX:AllocatePrefetchStyle=3

Пояснение ключевых флагов:

  • -XX:+UseNUMA — оптимизации для многосокетных систем. Автоматически отключается, если неприменимо.
  • -XX:-DontCompileHugeMethods — разрешает компиляцию «огромных» методов. В моддед-Minecraft их немало.
  • -XX:ReservedCodeCacheSize=400M — резервирует больше места для скомпилированного кода. Стандартный лимит 250 МБ может заполняться в моддед-Minecraft.
  • -XX:NmethodSweepActivity=1 — «холодный» код дольше остаётся в кэше.
  • -XX:+UseCriticalJavaThreadPriority — потоки Minecraft не должны вытесняться GC или компилятором.
  • -XX:AllocatePrefetchStyle=3 — агрессивный префетчинг. Несовместим с ZGC — при его использовании замените на =1.
  • -XX:+UseFastUnorderedTimeStamps — избегает системных вызовов при получении временных меток.



VII.НАСТРОЙКА ПОТОКОВ GC

Java:
-XX:ConcGCThreads=[ЧИСЛО]

Этот параметр задаёт максимальное количество фоновых потоков для сборщика мусора. По умолчанию: логические ядра / 4.

  • 4 потока CPUConcGCThreads=2
  • 6–8 ядерConcGCThreads=[кол-во реальных ядер − 2]
  • Для ZGC и Shenandoah — рекомендуется увеличить это значение выше дефолтного

⚠ Опасность: Слишком мало потоков → GC не успевает, растут фризы и потребление RAM → краш. Слишком много → замедление игры, особенно на Java 8.



VIII.G1GC — СТАНДАРТНЫЙ СБОРЩИК МУСОРА

G1GC — сборщик мусора по умолчанию в JVM. Хорошо работает, но может создавать заметные паузы при большой куче. Единственный вариант для пользователей GraalVM EE.

G1GC для клиента:

Модифицированные флаги с короткими, но частыми паузами — оптимально для однопользовательской игры:

Java:
-XX:+UseG1GC
-XX:MaxGCPauseMillis=37
-XX:+PerfDisableSharedMem
-XX:G1HeapRegionSize=16M
-XX:G1NewSizePercent=23
-XX:G1ReservePercent=20
-XX:SurvivorRatio=32
-XX:G1MixedGCCountTarget=3
-XX:G1HeapWastePercent=20
-XX:InitiatingHeapOccupancyPercent=10
-XX:G1RSetUpdatingPauseTimePercent=0
-XX:MaxTenuringThreshold=1
-XX:G1SATBBufferEnqueueingThresholdPercent=30
-XX:G1ConcMarkStepDurationMillis=5.0
-XX:G1ConcRSHotCardLimit=16
-XX:G1ConcRefinementServiceIntervalMillis=150
-XX:GCTimeRatio=99

G1GC для сервера:

На сервере допустимы более длинные паузы. Флаги близки к Aikar, но с улучшениями:

Java:
-XX:+UseG1GC
-XX:MaxGCPauseMillis=130
-XX:+UnlockExperimentalVMOptions
-XX:+DisableExplicitGC
-XX:+AlwaysPreTouch
-XX:G1NewSizePercent=28
-XX:G1HeapRegionSize=16M
-XX:G1ReservePercent=20
-XX:G1MixedGCCountTarget=3
-XX:InitiatingHeapOccupancyPercent=10
-XX:G1MixedGCLiveThresholdPercent=90
-XX:G1RSetUpdatingPauseTimePercent=0
-XX:SurvivorRatio=32
-XX:MaxTenuringThreshold=1
-XX:G1SATBBufferEnqueueingThresholdPercent=30
-XX:G1ConcMarkStepDurationMillis=5
-XX:G1ConcRSHotCardLimit=16
-XX:G1ConcRefinementServiceIntervalMillis=150



IX.SHENANDOAH GC— ЛУЧШИЙ ВЫБОР ДЛЯ КЛИЕНТА

Shenandoah — это сборщик мусора с ультранизкими паузами, который выполняет большую часть работы параллельно с выполнением Java-программы. Время паузы при сборке мусора практически одинаково как для кучи объёмом 200 ГБ, так и для 2 ГБ.

Паузы GC — главная причина фризов в Minecraft. Стандартный G1GC вызывает заметные рывки. Shenandoah устраняет их почти полностью, выполняя сборку мусора конкурентно с работой игры.

Результаты тестов (UltimateBoomer):

  • Стандартная настройка — частые рывки FPS:
    perf2.png

  • Стандартная настройка, 4 ГБ — реже, но более длительные паузы:
    perf3.png

  • Java + Shenandoah GC, 4 ГБ — рывки почти исчезли:
    perf1.png

Флаги Shenandoah GC (клиент):

Java:
-XX:+UseShenandoahGC
-XX:ShenandoahGCMode=iu
-XX:ShenandoahGuaranteedGCInterval=1000000
-XX:AllocatePrefetchStyle=1

Флаги для высокопроизводительного клиента (с базовыми флагами):

Java:
-Xms4G -Xmx4G
-XX:+UnlockExperimentalVMOptions
-XX:+UseShenandoahGC
-XX:ShenandoahGCMode=iu
-XX:ShenandoahGuaranteedGCInterval=1000000
-XX:+AlwaysPreTouch
-XX:AllocatePrefetchStyle=1

Замените 4G на нужный объём памяти.

⚠ Важные ограничения:

  • Shenandoah отсутствует в Java 8
  • Shenandoah отсутствует в Oracle JDK — нужен AdoptOpenJDK, Red Hat OpenJDK или другой дистрибутив
  • На Java 8 с Shenandoah — используйте Red Hat OpenJDK: developers.redhat.com
  • Не используйте режим compact — он значительно снижает производительность
  • Параметры «heuristic» и «mode» практически не влияют на результат (кроме compact)
  • Несовместим с AllocatePrefetchStyle=3 — обязательно замените на =1

Совет по производительности:

  • Shenandoah отлично работает на клиенте
  • На сервере Shenandoah снижает общую пропускную способность (throughput) в тестах — для сервера с высокой нагрузкой предпочтителен ZGC или G1GC
  • В тестах с 200+ модами и 4 ГБ ОЗУ — Shenandoah не вызывал заметных задержек

🛠 Быстрая сборка аргументов:Minecraft Flags Generator — Birdflop
Проверить совместимость JVM с Shenandoah:openjdk.java.net



X.ZGC— ДЛЯ МОЩНЫХ СЕРВЕРОВ

ZGC — сборщик мусора с нулевой ощутимой нагрузкой на сервер. Практически не создаёт пауз и не снижает TPS, однако требует больше ресурсов.

Когда использовать ZGC:

  • Сервер с большим количеством памяти (от 16 ГБ и выше)
  • Многоядерный CPU (8+ реальных ядер)
  • Java 17 или выше (в Java 11 ZGC значительно хуже)
  • Не рекомендуется на клиенте — значительное падение FPS
  • Недоступен в Java 8

Флаги ZGC:

Java:
-XX:+UseZGC
-XX:AllocatePrefetchStyle=1
-XX:-ZProactive

⚠ Обязательно: При использовании ZGC выделяйте больше ОЗУ и увеличивайте -XX:ConcGCThreads по сравнению с другими GC. ZGC несовместим с AllocatePrefetchStyle=3 — используйте =1.



XI.GRAALVM ENTERPRISE EDITION— МАКСИМУМ ПРОИЗВОДИТЕЛЬНОСТИ

GraalVM EE — новая JVM от Oracle с агрессивным JIT-компилятором. Даёт заметный прирост производительности сервера:

  • До 20%+ ускорения генерации чанков на сервере
  • Более агрессивная оптимизация Java-кода в рантайме
  • Совместим только с G1GC — ZGC и Shenandoah не поддерживаются
  • Требует ручной установки вместо JRE лаунчера

Где скачать GraalVM EE:


Аргументы GraalVM EE 22+ (Java 17 / Java 11):

Java:
-XX:+UnlockExperimentalVMOptions
-XX:+UnlockDiagnosticVMOptions
-XX:+AlwaysActAsServerClassMachine
-XX:+AlwaysPreTouch
-XX:+DisableExplicitGC
-XX:+UseNUMA
-XX:AllocatePrefetchStyle=3
-XX:NmethodSweepActivity=1
-XX:ReservedCodeCacheSize=400M
-XX:NonNMethodCodeHeapSize=12M
-XX:ProfiledCodeHeapSize=194M
-XX:NonProfiledCodeHeapSize=194M
-XX:-DontCompileHugeMethods
-XX:+PerfDisableSharedMem
-XX:+UseFastUnorderedTimeStamps
-XX:+UseCriticalJavaThreadPriority
-XX:+EagerJVMCI
-Dgraal.TuneInlinerExploration=1
-Dgraal.CompilerConfiguration=enterprise

К этим аргументам добавьте флаги G1GC сервера из раздела VIII.

Совместимость с модами:

  • GraalVM EE 22.3.0 и новее — исправлены все известные баги с модами Minecraft
  • Старые версии: возможны проблемы с шейдерами (VectorizeSIMD делает сущности невидимыми с Optifine/Iris/Oculus). Решение: добавьте -Dgraal.VectorizeSIMD=false
  • В 1.16.5 Astral Sorcery неправильно рендерятся созвездия — баг GraalVM CE и EE



XII.УПРАВЛЕНИЕ ПАМЯТЬЮ

Xms и Xmx — базовые параметры:

  • -Xms — минимальный объём кучи (heap)
  • -Xmx — максимальный объём кучи

Рекомендация: Устанавливайте Xms = Xmx для минимизации overhead'а GC. Единственное исключение — Pterodactyl и системы с критически малым объёмом ОЗУ (Xms ниже Xmx).

Сколько памяти выделять?

  • Для ванильного Minecraft или лёгких модпаков — достаточно 2–4 ГБ
  • Для тяжёлых модпаков (100+ модов)4–8 ГБ
  • Не выделяйте лишнее — избыток памяти увеличивает паузы GC

Off-heap память:

Minecraft также использует внекучную (off-heap) память — например, для текстур. При загрузке текстурного пакета 256x с 4 ГБ кучи Minecraft может занять 12+ ГБ в диспетчере задач. Это нормально.

mem.png


💡 Используйте мод Spark: Команда /sparkc gcmonitor покажет паузы GC в реальном времени. Частые длинные паузы → мало памяти или неверные флаги GC.



XIII.LARGE PAGES

⚠ На Windows требуются права администратора. Пропустите этот раздел, если вы не готовы к этому.

Включение Large Pages заметно улучшает производительность серверов и клиентов.

Добавьте к аргументам:

Java:
-XX:+UseLargePages -XX:LargePageSizeInBytes=2m

На Linux предпочтительнее:

Java:
-XX:+UseTransparentHugePages

Инструкции по включению:


На Windows необходимо запускать Java и лаунчер с правами администратора (галочка "Запускать от имени администратора" для javaw.exe, java.exe и launcher.exe).

Проверить, работает ли Large Pages, можно с флагом -Xlog:gc+init (Java 17).



XIV.JVM АРГУМЕНТЫ ВОФИЦИАЛЬНОМ ЛАУНЧЕРЕ

  1. Откройте Minecraft Launcher и перейдите в раздел «Установки» (Installations)
    1735214434347
  2. Выберите нужный профиль и нажмите «Дополнительные настройки» (More Options)
    17352145331141735214510834
  3. В разделе «Аргументы JVM» (JVM ARGUMENTS) измените существующие параметры или добавьте новые



XV.ИССЛЕДОВАНИЕULTIMATEBOOMERНА КЛИЕНТЕ

1735216397092

Для высокопроизводительных систем (достаточно ОЗУ):

  1. Скачайте JRE от AdoptOpenJDK (adoptium.net)
  2. Выберите OpenJDK 17 (или 11/15, если моды не поддерживают 17) с HotSpot JVM
  3. Скачайте zip-версию — установщик не нужен
  4. Разархивируйте в удобную папку (например, рядом с встроенным JRE: C:/Program Files (x86)/Minecraft Launcher/runtime)
  5. В профиле лаунчера укажите путь к новому Java: (Путь к JRE)/bin/javaw.exe
  6. Установите аргументы JVM:

Java:
-XmsNG -XmxNG
-XX:+UnlockExperimentalVMOptions
-XX:+UseShenandoahGC
-XX:ShenandoahGCMode=iu
-XX:ShenandoahGuaranteedGCInterval=1000000
-XX:+AlwaysPreTouch
-XX:AllocatePrefetchStyle=1

Замените N на количество гигабайт памяти (например, 4G).

Для систем с малым объёмом ОЗУ (OpenJ9):

  1. Скачайте JRE от AdoptOpenJDK
  2. Выберите OpenJDK 15 (или 11/8 для совместимости с модами) с OpenJ9 JVM
  3. Скачайте zip-версию — установщик не нужен
  4. Разархивируйте и укажите путь в лаунчере аналогично варианту выше
  5. Установите аргументы JVM:

Java:
-XmsNG -XmxNG
-Xgcpolicy:gencon

Замените N на объём памяти.

⚠ Примечание: Некоторые старые версии Forge несовместимы с OpenJ9 и новыми версиями Java.



XVI.ДОПОЛНИТЕЛЬНЫЕ СОВЕТЫ ПО ПРОИЗВОДИТЕЛЬНОСТИ

Для Windows:

  • После запуска Minecraft установите для процесса Java приоритет «Выше нормального» в Диспетчере задач
  • Закройте браузер, Discord и другие тяжёлые фоновые программы
  • Убедитесь, что Minecraft использует дискретную GPU (проверьте во вкладке F3). Принудительно назначьте в Параметры Windows → Параметры графики

Для Linux:

  • Используйте nice -n -10 или команду renice после запуска
  • Рассмотрите использование Clear Linux для сервера — одна из наиболее оптимизированных дистрибуций из коробки
  • Для серверов также хорош Oracle Linux (GraalVM EE доступен через пакетный менеджер)

Рекомендуемые перформанс-моды:




XVII.СРАВНИТЕЛЬНАЯ ТАБЛИЦА GC

Сборщик мусораКлиентСерверОЗУJavaПримечание
G1GCХорошоОтличноЛюбой8+Стандарт, обязателен для GraalVM EE
ShenandoahОтличноУмеренноЛюбой11+Лучший выбор для клиента, не в Oracle JDK
ZGCПлохоОтлично16 ГБ+17+Нет ощутимых пауз, нужно много ядер и ОЗУ
gencon (OpenJ9)ХорошоХорошоМалый8+Только с OpenJ9, экономия ОЗУ



XVIII.ПОЛЕЗНЫЕ РЕСУРСЫ

Инструменты:


Официальная документация:



JRE и дистрибутивы Java:


Полезные моды:







Правильная настройка JVM-аргументов — ключевой элемент стабильной и плавной работы

серверов и клиентов Minecraft. Экспериментируйте осторожно: некорректные параметры могут привести к сбоям.


 

Вложения

  • 1735214411593.png
    1735214411593.png
    43,4 КБ · Просмотры: 18
Последнее редактирование:
_Dead_
  • _Dead_
  • Жiнка з ароматом пива, шкiра снiжного кальвiна.
  • 187
@Shadedfern, благодарю, я еще забыл упомянуть GraalVM так что в будущем дополню тему ведь там тоже интересно.
 
ВерхНиз