Конфигурация ядра сервера
При возникновении лагов, фризов, внезапных отключений сервера - не следует сразу винить в этом хостинг-провайдера. Есть вероятность, что конфигурация ядра и окружения не подходит вашему ядру или версии 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
- Это не гарантированное решение проблемы, проверяйте все решения на локальном сервере.
Автор статьи: Arkanum.