Флаги JVM для Minecraft-сервера: Aikar's flags, зачем они нужны и как не сломать запуск
Что такое Aikar's flags, какие параметры JVM в них важны, почему на EGN память задаёт тариф, и что делать, если сервер тормозит на сборках мусора.
Содержание 17
- Коротко
- Что такое Aikar’s flags
- Как память задаётся на EGN
- Выбор Java
- Команда запуска
- Примеры: как понять, что флаги нужны
- Симптом → причина → решение
- Шаги для проверки на своём сервере
- Как проверить, что изменение помогло
- Что делать, если набор не помог
- Частые ошибки
- Итог
- Вопросы и ответы
- Нужны ли Aikar’s flags на любом Minecraft-сервере?
- Можно ли задать -Xmx самому в панели EGN?
- Какой Java нужен для Minecraft 1.21.1?
- Почему сервер стартует дольше после флагов Aikar?
Сервер Minecraft — это программа на Java. Её поведение во многом зависит от того, как JVM управляет памятью и сборкой мусора. Самый известный готовый набор настроек называется Aikar’s flags: его предложил разработчик Aikar для серверов Paper, и он вошёл в официальную документацию PaperMC. Если сервер тормозит с периодическими «провалами», эти флаги часто помогают. Но перед тем как их копировать, нужно понимать, что именно они меняют и что в панели EGN можно сделать самостоятельно.
Коротко
Aikar’s flags — набор параметров JVM для сборщика мусора G1GC, который уменьшает длинные паузы на Paper 1.21.x. Официальный пример рассчитан на кучу 10 ГБ (-Xms10G -Xmx10G); значения меняются под вашу память. На EGN память задаёт тариф, поэтому пользователь не добавляет -Xmx сам: команду запуска меняет поддержка.
Что такое Aikar’s flags
Java по умолчанию сама решает, сколько памяти взять и когда запускать сборку мусора. Для игрового сервера это плохо: сборка может остановить все потоки на заметное время, и игроки видят рывок. Флаги Aikar задают G1GC и настраивают, как часто и насколько аккуратно он работает.
Официальная страница PaperMC приводит такой набор (пример для кучи 10 ГБ):
-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 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=trueСмысл нескольких ключевых параметров:
-XX:+UseG1GC— включает сборщик G1, на котором построен набор.-XX:MaxGCPauseMillis=200— цель: паузы сборки не длиннее 200 мс. Это цель, а не гарантия.-XX:+DisableExplicitGC— запрещает явные вызовы сборки мусора из кода модов и плагинов, которые любят вызыватьSystem.gc().-XX:+AlwaysPreTouch— заранее занимает всю память кучи при старте. Запуск становится медленнее, зато во время игры нет задержек на выделение памяти.-XX:G1NewSizePercent=30и-XX:G1MaxNewSizePercent=40— доля «молодого» поколения в куче.-XX:G1HeapRegionSize=8M— размер региона G1 в примере из документации.
Страница рекомендует, чтобы -Xms и -Xmx были равны. Если начальная куча меньше максимальной, часть памяти остаётся неиспользованной, а G1 получает меньше места для работы. Там же сказано: не стоит отдавать серверу всю память хоста. Оставляйте запас примерно 1000–1500 МБ под саму систему и JVM вне кучи.
Это именно пример: объём кучи подбирайте под свой тариф и оставляйте запас, о котором сказано выше. Актуальный набор всегда сверяйте со страницей Aikar’s flags в документации PaperMC. Там же рекомендация держать для Paper не меньше 6–10 ГБ.
Как память задаётся на EGN
На EGN память сервера определяется тарифом. Откройте раздел «Запуск» в панели. Там есть блок «Память и производительность»: сколько памяти в тарифе, сколько получает Java и какой запас остаётся системе.
В примере на скриншоте тариф даёт 3 ГБ. Java получает 2,5 ГБ, а 0,5 ГБ остаются системе и JVM вне кучи. Стандартная команда запуска в панели задаёт кучу как долю памяти тарифа (около 85%) и не использует -XX:+AlwaysPreTouch, поэтому ручной -Xmx для обычной работы не нужен. Ручной -Xmx больше памяти тарифа приводит к падению сервера.
Доктор сервера в панели подсказывает то же самое: если в «Запуске» задан -Xmx, ставьте его не выше 85% памяти тарифа, а лучше уберите ручное значение.
Выбор Java
Версия Java должна подходить под Minecraft. В том же разделе «Запуск» есть карточки:
- Java 25 — для Minecraft 26.x и новее;
- Java 21 — для 1.20.5–1.21.x;
- Java 17 — для 1.18–1.20.4 (для 1.17 в панели есть карточка Java 16, для 1.13–1.16 — Java 11);
- Java 8 — для 1.8–1.16 и старого Forge.
Если выбрать Java 21 для Minecraft 26.3, сервер не запустится: панель сама покажет предупреждение, что нужна Java 25.
Команда запуска
Внизу раздела есть блок «Для опытных: команда запуска». Это то, как сервер запускается на самом деле, со всеми подставленными переменными. В панели её нельзя отредактировать. Текст блока прямо говорит: команду меняет поддержка или администратор, а обычно хватает полей выше.
Поэтому Aikar’s flags на EGN не вписываются в интерфейс сами по себе. Если вам нужен другой набор флагов, напишите в поддержку, опишите сервер и цель (например, убрать паузы при сохранении). Поддержка проверит на вашем тарифе, подходит ли набор, и внесёт команду. Не обещаем, что любой набор пройдёт без проверки: кучу и память выбирает тариф.
Примеры: как понять, что флаги нужны
Прежде чем менять что-либо, посмотрите, что происходит. Признаки, при которых флаги G1GC обычно помогают:
- в логе регулярно встречаются предупреждения о долгих сборках, а игроки видят короткие рывки;
- MSPT (время одного тика) периодически взлетает, хотя средняя нагрузка невысокая;
- после перезапуска сервер стабилен, а через несколько часов появляются провалы.
Если сервер падает с OutOfMemoryError, дело обычно не во флагах, а в памяти тарифа или в модах, которые утекают. Флаги GC этого не исправят.
Симптом → причина → решение
| Симптом | Вероятная причина | Что делать |
|---|---|---|
| Рывки раз в несколько минут, MSPT скачет | Долгие сборки мусора | Проверить MSPT через /spark tps, попросить поддержку применить набор Aikar для вашей памяти |
| Сервер стартует очень медленно | Если набор Aikar применён, -XX:+AlwaysPreTouch занимает всю память при старте |
Это ожидаемо; старт дольше, игра после него ровная |
OutOfMemoryError в логе |
Памяти тарифа не хватает или мод утекает | Увеличить тариф, проверить моды через «Моды и плагины», снять лишнее |
| Сервер не стартует на Java 17 | Minecraft 1.21 требует Java 21 | В «Запуске» выбрать Java 21 |
| Ошибка «Unrecognized VM option» | Флаг не поддерживается версией Java | Не добавлять флаги вручную; вернуть стандартную команду через поддержку |
Шаги для проверки на своём сервере
- Откройте «Консоль» и выполните
/spark tps. Посмотрите MSPT и загрузку CPU. - Откройте «Запуск», проверьте версию Java и блок памяти. Если версия не совпадает с Minecraft, поправьте её.
- Включите «Доктор сервера» и нажмите «Почему не запускается?», если сервер падает. Доктор покажет причину и предложит починку.
- Если после исправлений рывки остались, запустите профилирование через
/spark profiler(см. статью Spark: как найти причину лагов). - Только после этого решайте, нужен ли набор Aikar. Напишите в поддержку, что сервер на Paper 1.21.x, какой тариф и что видно в MSPT.
Меняйте по одному параметруЕсли вы просите применить новый набор флагов, фиксируйте MSPT до и после. Без цифр до и после понять, помогло ли, невозможно.
Не ставьте -Xmx выше памяти тарифаJava с большим
-Xmxбудет упираться в лимит контейнера. Результат —OutOfMemoryErrorили внезапная остановка сервера с кодом 137.
Версия Paper и JavaДля Paper 1.21.x используйте Java 21. Для Minecraft 26.x — Java 25. Не выбирайте Java по привычке: сверяйтесь с карточками в «Запуске».
Как проверить, что изменение помогло
Любую правку JVM нужно сравнивать с исходным состоянием. Порядок простой.
- Запустите сервер в обычной нагрузке, например в вечерний час пик, и выполните в «Консоли» команду
/spark tps. Запишите MSPT и загрузку CPU. - Через
/spark profiler start --timeout 300снимите профиль за пять минут. Так вы увидите, сколько времени занимает сборка мусора по сравнению с логикой игры. - Внесите изменение: попросите поддержку применить набор или поправьте версию Java в «Запуске». Перезапустите сервер через «Запуск» → «Сохранить и перезапустить».
- Повторите шаги 1 и 2 в такой же нагрузке и сравните цифры.
Если MSPT не изменился, а профиль показывает большую долю работы модов или плагинов, флаги JVM дают мало. В таком случае помогает чистка модов или переход на более лёгкий набор, а не новые флаги.
Цифры до и после нужны, чтобы не принимать на веру ощущения. Игроки часто говорят «стало лучше» после перезапуска, хотя причина была в том, что сервер просто только что поднялся и пустой.
Что делать, если набор не помог
Не все проблемы лечатся флагами JVM. Если после замены набора MSPT не изменился, проверьте по порядку:
- Профиль spark: если широкая ветка в модах или плагинах, JVM тут не при чём.
- Версия Java: убедитесь, что выбрана карточка, которая соответствует Minecraft, а не старая.
- Память тарифа: если запас системе почти ноль, JVM не может работать свободно. Нужен тариф с большим объёмом.
- Диск: медленный диск даёт длинные паузы при сохранении, которые G1 не лечит.
Вернуться к стандартной команде запуска можно через поддержку. Не меняйте её вручную в файлах, если не уверены: ошибка в команде запуска мешает старту.
Частые ошибки
Копировать набор на 20 ГБ на сервер с 4 ГБ. Флаги не создают памяти. Если куча больше памяти тарифа, сервер падает или упирается в лимит.
Ставить -Xms меньше -Xmx и думать, что так экономнее. Это то, что страница PaperMC советует не делать: часть памяти простаивает, а G1 работает хуже.
Добавлять флаги «на всякий случай». Каждый флаг влияет на поведение сборщика. Без замеров вы не узнаете, что стало лучше.
Думать, что флаги починят моды. Утечки, лишние тики и тяжёлые плагины флагами не лечатся. Сначала профиль, потом настройки JVM.
Менять версию Java без проверки. Java 21 для Minecraft 26.x не подходит, Java 25 для 1.20 — тоже. Выбирайте по версии игры.
Итог
Aikar’s flags — проверенный набор для G1GC, который уменьшает длинные паузы сборщика мусора на Paper. Официальный пример рассчитан на кучу 10 ГБ, значения для других объёмов есть на странице PaperMC. На EGN память задаёт тариф: блок «Память и производительность» в «Запуске» показывает, сколько получает Java. Команду запуска меняет поддержка, поэтому набор флагов нужно согласовать с ней, а до этого проверить MSPT через /spark tps и устранить причины, которые флагами не лечатся.
Вопросы и ответы
Нужны ли Aikar’s flags на любом Minecraft-сервере?
Нет. Они рассчитаны на Paper и G1GC. Если сервер не тормозит и MSPT стабилен, менять JVM не нужно.
Можно ли задать -Xmx самому в панели EGN?
В команде запуска поля для этого нет: её меняет поддержка. Память определяет тариф, а блок «Память и производительность» в «Запуске» показывает, сколько получает Java.
Какой Java нужен для Minecraft 1.21.1?
Java 21. Для 26.x нужна Java 25, для 1.17–1.20.4 — Java 17. Выбирайте карточку в разделе «Запуск».
Почему сервер стартует дольше после флагов Aikar?
Из-за -XX:+AlwaysPreTouch: JVM заранее занимает всю кучу. Это цена за ровную работу во время игры. В стандартной команде панели этого флага нет.
Сервер под Minecraft за пару минут — egnetwork.ru
Читать далее
Вся рубрика →Чек-лист оптимизации Minecraft-сервера: 10 шагов от первого замера до стабильного MSPT
Пошаговый чек-лист для сервера Minecraft в панели EGN: замер MSPT, память, дальность, Chunky, расписание перезапуска, бэкапы и проверка после каждого изменения.
Обновление плагинов Minecraft без поломок: порядок действий
Как читать changelog, обновлять плагины по одному, проверять лог после запуска и откатываться через историю в панели EGN. С таблицей симптомов и причин.
Lithium, FerriteCore, ModernFix: моды-оптимизаторы для Minecraft-сервера и какой выбрать
Что делает каждый мод-оптимизатор, для каких загрузчиков они подходят на 2026 год, как поставить их через «Моды и плагины» в панели EGN и чем они отличаются от плагинов Paper.