Почему не флаги Айкара?
Все очень просто, сбор мусора у него основан, как он говорит, на невероятно стабильном, но крайне медленном по текущим меркам алгоритме G1. При этом всем он максимально устарел, все, что он реализовал, было инновационным во времена JDK 8, сейчас - нет. Действительно, зачем менять то, что работает? А стоило бы.
На замену я предлагаю поставить Shenandoah - это сборщик мусора с невероятно малым временем паузы, что так раз подходит для нашей любимой игры, мы же все не любим фризы. На стабильность это никак не повлияло, за все время бесперебойного тестирования не было выявлено ни одной проблемы.
Я не призываю всех тут же менять свои свойста запуска сервера, я лишь даю понять, что ничего идеального не бывает. Так же я не отвечаю за стабильность работы моих параметров в вашем конкретном случае, все системы разные, а результаты абсолютно индивидуальны.
Поддержививаемые сборки JDK:
Рекомендую использовать OpenJDK 17
- OpenJDK 8+
- Red Hat 8+
- Amazon 11+
- Azul 11+
- AdoptOpenJDK 11+
- Oracle
- SAP
Поддержививаемые сервера:
- Vanilla
- Bukkit, Spigot, Paper...
- Fabric
- Forge
Готовые свойства:
java -jar -server -Xms6G -Xmx6G -XX:+UseLargePages -XX:LargePageSizeInBytes=2M -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCMode=iu -XX:+UseNUMA -XX:+AlwaysPreTouch -XX:-UseBiasedLocking -XX:+DisableExplicitGC -Dfile.encoding=UTF-8 launcher-airplane.jar --nogui
Предупреждение
Option UseBiasedLocking was deprecated in version 15.0 and will likely be removed in a future release.
может безопасно игнорироваться и использоваться на вашем сервере, флаг UseBiasedLocking прекрасно выполняет свои функции.
А теперь внимательно разберем, что за что отвечает:
-Xms6G и -Xmx6G: устанавливает границы использования памяти вашим сервером Minecraft, рекомендую не использовать более 12 Гб для вашего сервера и всегда оставлять 1 - 2 Гб свободной памяти для системы.
-XX:+UseLargePages и -XX:LargePageSizeInBytes=2M: позволяет использовать зарегистрированую память большими страницами, ускоряет скорость запуска и отзывчивость сервера. Заставим Linux регистрировать страницы для нас. Добавляем эту строку в /etc/sysctl.conf
:
vm.nr_hugepages = 3372
Как мы получили это число? Допустим, я хочу зарегистрировать 6 Гб больших страниц, для этого делю 6 Гб на 2.
6 * 1024 / 2 = 3072
Далее я рекомендую оставить немного свободного места, и добавить 300 к нашему числу.
3072 + 300 = 3372
После перезагружаем систему для применения изменений. Убедиться в том, что память успешно зарегистрована можно командой grep -i hugepages /proc/meminfo
.
-XX:+UnlockExperimentalVMOptions: включает возможность использования эксперементальных возможностей.
-XX:+UseShenandoahGC: использование в роли алгоритма сборки мусора проект Шенандоа.
-XX:ShenandoahGCMode=iu: включение экспериментального режима работы нашего сборщика, он является зеркалом режима SATB, что сделает разметку менее консервативной, особенно в отношении доступа к слабым ссылкам.
-XX:+UseNUMA: включает чередование NUMA на хостах с несколькими сокетами, в сочетании с AlwaysPreTouch он обеспечивает лучшую производительность, чем стандартная готовая конфигурация. Более подробно о данной архитектуре можно узнать отсюда.
-XX:+AlwaysPreTouch: предрегистрация сразу всей выделенной памяти, уменьшает заддержки ввода.
-XX:-UseBiasedLocking: существует компромисс между пропускной способностью неограниченной (предвзятой) блокировки и безопасными точками, которые JVM делает, чтобы включать и выключать их по мере необходимости. Для рабочих нагрузок, в том числе сервера Minecraft, ориентированных на задержку, имеет смысл отключить предвзятую блокировку.
-XX:+DisableExplicitGC: вызов System.gc () из пользовательского кода заставляет ShenandoahGC выполнить дополнительный цикл сборки мусора, отключение защищает от кода злоупотребляющего этим.
В качестве максимально стабильного и производительного варианта, я бы порекомендовал использовать Airplane.
Tuned-adm - это инструмент командной строки, который позволяет переключаться между настроенными профилями для повышения производительности в ряде конкретных случаев использования. Установите пакет с помощью apt-get
:
sudo apt-get install tuned
Далее вам нужно подобрать конфиг под вашу систему, я рекомендую использовать throughput-performance
или latency-performance
, установите нужный вам профиль:
sudo tuned-adm profile throughput-performance
Убедиться в том, что изменения применены можно командой tuned-adm profile
.
Подробная статья о всех профилях и в каких случаях их стоит использовать здесь.
chunk-gc:
period-in-ticks: 600
Рекомендованное значение chunk-gc.period-in-ticks
:
Не выделяйте больше чем 12 Гб памяти, это не даст никакого эффекта в большинстве случаев.
Память / Кол-во игроков | до 30 | 30 - 60 | 60 - 100 | более 100 |
---|---|---|---|---|
4 Гб | 400 | - | - | - |
8 Гб | 600 | 400 | 300 | - |
12 Гб | 1200 | 800 | 600 | 400 |