Конфигурация ядра сервера

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

1. Проверка актуальности параметров запуска ядра.

С последними обновлениями Minecraft, код игры не раз подвергался глобальным изменениям: производился рефакторинг или вообще вычищался.

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

Самым первым параметром запуска считается установка объема ОЗУ, потребляемого ядром - Xms и Xmx. В новых версиях разработчики ядер рекомендуют устанавливать 6-8 ГБ, для корректной работы сборщика мусора JVM. Таким образом, нашим первым параметром станет -Xms6G -Xmx6G

  • Данный параметр устанавливается в зависимости от вашей конфигурации. Вы не сможете установить больше, чем вам выделил хостинг-провайдер.
  • Не выделяйте серверу всю память, оставьте 1000-1500 МБ для стабильной работы контейнера.

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

На этом сайте Вы сможете скопировать уже подготовленные аргументы запуска для вашего сервера, с возможностью регулировки выделенной памяти.

2. Z Garbage Collector (ZGC)

В Java, начиная с версии 9 используется Сборщик мусора G1GC, который превосходно справляется с большим объемом памяти. Он разделяет объекты в памяти на поколения - Young и Old

Вновь созданные объекты размещаются в Young поколении, где часто происходит сборка мусора. Объекты, которые сохраняются после нескольких циклов сборки мусора, перемещаются в Old поколение. Это разделение повышает эффективность, учитывая короткий срок жизни большинства объектов при сборке.

С релизом Java версии 21 появилась альтернатива - Z Garbage Collector (ZGC). В начальных стадиях разработки этот сборщик мусора являлся негенеративным, т.е, не использовал поколения, а собирал и обрабатывал всю кучу сразу, однако, к версии 21 в Java вернулись к использованию поколений, чтобы уменьшить задержки с выделением и высвобождением памяти.

Данный сборщик мусора всё ещё экспериментируется в реалиях серверов Minecraft, поэтому, если Вы испытываете проблемы с освобождением памяти на сервере, можете попробовать его, как способ решения проблемы.

Просто скопируйте эти параметры запуска к себе на сервер и анализируйте производительность под нагрузкой

  • Для работы этих параметров требуется Java 21 и выше.
java -Xms6144M -Xmx6144M -XX:+UseZGC -XX:+ZGenerational -XX:+AlwaysPreTouch -XX:+UseStringDeduplication -XX:+UnlockExperimentalVMOptions -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:+ParallelRefProcEnabled -XX:MaxTenuringThreshold=1 -jar server.jar --nogui
  • Это не гарантированное решение проблемы, проверяйте все решения на локальном сервере.

Мониторинг Spark

Автор статьи: Arkanum.