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

СливПлатные

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

  • Dovakent
  • Karakatoka
  • Scoutbusiness
  • TheFriken
  • fleizyy
  • alex321
  • quad
  • SeaCore
  • IlyiCraft
  • SinT
  • dfgfghfgrh
  • dsad23sda
  • kizakuz
  • Absolutely
  • hoshi batista
  • RainUZB
  • DarmanTopFarm
  • LAVIX
  • Robyan
  • Postal_08
  • MachuPapa2020
  • br1ckv73
  • fallendeco
  • dragneel700
  • Cobi
  • ArtKot
  • 01NeDeXD
  • lum1x_
  • Kobalew
  • AlexSSID
  • Yan33k
  • Magma1208
  • kadg
  • ReloadWorld
  • lqxnio
  • Gof4ik
  • xianliang
  • Eg0sh
  • malis666
  • eznn
  • kiniemxua
  • Headus
  • ImPenguin
  • Hoon8773
  • itsDesterYT
  • DAFSSS11
  • Jarvis20015
  • RamzST
  • AstralSky

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

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

Особенности настройки на Pterodactyl

pterodactyl_logo_transparent.png

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

Флаги Aikar: универсальное решение

Aikar предложил набор JVM-аргументов, которые подходят для серверов любого масштаба. Эти параметры обеспечивают оптимальную производительность и масштабируемость. Важное замечание: если объем памяти превышает 12 ГБ, следует внести дополнительные изменения для оптимизации работы сборщика мусора (GC).
Вы можете использовать вот этот инструмент для создания уже готового варианта запуска с вашими предпочтениями, он уже учитывает объем памяти:Minecraft Flags Generator - Birdflop (Вам стоит учитывать Pterodactyl)

Пример базовых флагов Aikar:

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

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

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

Пользовательские флаги JVM

Для более точной настройки вы можете создать собственные флаги JVM, адаптированные под ваш сервер. Наиболее часто изменяемые параметры:

  • -Xms — минимальный объем памяти. Рекомендуется устанавливать равным Xmx, чтобы минимизировать количество сборок мусора.
  • -Xmx — максимальный объем памяти. Обычно рекомендуется выделять около половины доступной оперативной памяти.

Выбор JVM: HotSpot или OpenJ9?

Среди наиболее популярных JVM — HotSpot и OpenJ9.

  • HotSpot обеспечивает высокую производительность, но требует больше памяти.
  • OpenJ9 использует меньше ресурсов, что делает его подходящим для систем с ограниченным объемом ОЗУ.

Оптимизация сборки мусора (Garbage Collection)

По умолчанию в JVM используется G1GC, однако для серверов с большими объемами памяти может быть полезным переход на Shenandoah GC. Этот сборщик минимизирует задержки, обеспечивая низкие паузы даже при больших объемах памяти, использование его на клиентской стороне может значительно уменьшить микро фризы в игре вызванные сборкой мусора, однако нужно учитывать что подбор аргументов может быть для каждого индивидуальным.
Shenandoah — это сборщик мусора с низкими паузами, который уменьшает время задержек, выполняя сборку мусора параллельно с работой программы на Java. При использовании Shenandoah время паузы при сборке мусора практически одинаково как для кучи объёмом 200 ГБ, так и для 2 ГБ.

По умолчанию в Minecraft используется G1GC, но он может вызывать значительные лаги при сборке больших куч. Поэтому рекомендуется использовать Shenandoah вместо G1GC. В моих тестах с выделением 4 ГБ оперативной памяти Shenandoah не вызывал заметных задержек и оказался крайне эффективным в работе со сборками модов 200+.

Активировать Shenandoah можно с помощью параметра:

Java:
-XX:+UseShenandoahGC

Но вы можете быстро собрать аргументы на его базе вот тут:Minecraft Flags Generator - Birdflop
Однако не все поставщики JVM поддерживают этот сборщик, проверьте совместимость здесь

Заключение

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

Для получения дополнительной информации посетите официальные ресурсы по JVM-аргументам

Oracle docs
OpenJDK Wiki
Eclipse OpenJ9 docs


Аргументы JVM для клиента в официальном лаунчере Minecraft

Чтобы настроить JVM-аргументы:

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

Исследование UltimateBoomer на клиенте​

1735216397092

Я протестировал несколько способов оптимизации Minecraft, чтобы улучшить стандартные настройки Java Edition.


Оптимизация работы Minecraft Java Runtime

Я протестировал несколько методов оптимизации Minecraft и улучшения настроек по умолчанию для версии Java Edition.

Основные рекомендации
Для быстрого понимания, вот мои рекомендованные настройки для Java Edition.

Примечание: Некоторые старые версии Forge не работают из-за несовместимости с OpenJ9 и более новыми версиями Java.


Оптимизация для высокопроизводительных систем — Для тех, у кого Minecraft работает хорошо

  1. Скачайте JRE от AdoptOpenJDK.
  2. Выберите OpenJDK 15 и установите HotSpot как JVM.
  3. Если ваши моды не поддерживают Java 15, выберите Java 11.
  4. Скачайте версию zip — установщик не требуется.
  5. Разархивируйте JRE в выбранную вами папку.
  6. Для удобства распакуйте JRE в ту же папку, что и встроенный JRE, который находится по адресу: C:/Program Files (x86)/Minecraft Launcher/runtime.
  7. В профиле лаунчера измените путь к исполняемому файлу Java на: (Путь к новому JRE)/bin/javaw.exe.
  8. Измените параметры JVM на:
    Java:
    -XmsNG -XmxNG -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+AlwaysPreTouch
    Замените N на количество памяти для выделения.

Оптимизация для систем с низким объемом памяти

  1. Скачайте JRE от AdoptOpenJDK.
  2. Выберите OpenJDK 15 и установите OpenJ9 как JVM.
  3. Если ваши моды не поддерживают Java 15, выберите Java 11 или 8.
  4. Скачайте версию zip — установщик не требуется.
  5. Разархивируйте JRE в выбранную вами папку.
  6. Для удобства распакуйте JRE в ту же папку, что и встроенный JRE, который находится по адресу: C:/Program Files (x86)/Minecraft Launcher/runtime.
  7. В профиле лаунчера измените путь к исполняемому файлу Java на: (Путь к новому JRE)/bin/javaw.exe.
  8. Измените параметры JVM на:
    Java:
    -XmsNG -XmxNG -Xgcpolicy:gencon
    Замените N на количество памяти для выделения.

Улучшения сборки мусора с новыми версиями Java

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

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

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

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

  • Java 15 с фиксированным 4 ГБ и Shenandoah GC — рывки почти исчезли.
    perf1.png
Shenandoah доступен в AdoptOpenJDK для Java 11 и выше. Его можно активировать заменой аргумента G1GC на -XX:+UseShenandoahGC Дополнительные настройки, такие как -XX:+AlwaysPreTouch, могут немного повысить производительность. Подробнее о Shenandoah и его настройках можно прочитать на официальной странице в OpenJDK wiki.

Аналогичным Shenandoah является ZGC, но он вызывает длительные проседания в Minecraft. Я не тестировал его достаточно для точной оценки производительности после настройки.


Аллокация памяти

Java использует два типа памяти: на-кучу (on-heap) и вне-кучи (off-heap). Вы можете изменить объем памяти, выделенной Minecraft, с помощью параметров JVM -Xms и -Xmx. Это объем на-кучной памяти, которая используется Minecraft, включая мир, встроенный сервер и все, что требуется для работы игры. Эта память подлежит сборке мусора.

Minecraft также использует вне-кучную память, например, для текстур. Это означает, что Minecraft может использовать больше памяти, чем указано в настройках. Например, при загрузке текстурного пакета 256x, несмотря на выделенные 4 ГБ, в диспетчере задач отображается, что игра использует более 12 ГБ.
mem.png


Примечание: Некоторые данные о памяти не отображаются в процессе Minecraft, как показано на скриншоте. Также важно не выделять слишком много памяти, так как это приведет к более длительным фризам во время сборки мусора.

Таким образом, не стоит выделять больше памяти, чем нужно Minecraft. Для ванильной версии и большинства модов 4 ГБ обычно достаточно. Увеличивайте память только в случае частых ошибок по нехватке памяти или слишком частых сборок мусора.


Hotspot против OpenJ9

Есть два варианта JVM: HotSpot и OpenJ9. HotSpot — это традиционный JVM для Java-приложений, таких как Minecraft. OpenJ9 — это более новая JVM, которая заявлена как имеющая более быстрое время старта и меньший объем использования памяти. В новых версиях OpenJ9 устранены проблемы с инициализацией, и теперь он совместим с любыми версиями Minecraft.

Сравнение использования памяти HotSpot и OpenJ9:

  • HotSpot: использует больше памяти.
    memtest2.png

  • OpenJ9: использует гораздо меньше памяти, даже при аргументе -Xms4G.
    memtest1.png
OpenJ9 экономит память, но его основной недостаток — медленнее производительность по сравнению с HotSpot, особенно в плане сборки мусора. При использовании OpenJ9 я заметил гораздо больше колебаний FPS по сравнению с HotSpot. Для сборщика мусора лучшим вариантом оказался gencon, который по производительности сравним с G1GC.

Если у вашего компьютера достаточно оперативной памяти, лучше использовать HotSpot с Shenandoah для более высокой производительности и эффективности.
 

Вложения

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