Два параметра -Xmx и -Xms определяют, сколько оперативной памяти получит Java-машина под сервер Minecraft. Ошибки здесь дают два противоположных симптома: при слишком малом значении сервер падает с OutOfMemoryError, при слишком большом — начинает подвисать, потому что сборщику мусора приходится обходить гигантскую кучу. Разберу, как выбрать значение под свой тариф и сборку.
Что означают Xmx и Xms для сервера Minecraft
-Xmx— максимальный размер кучи (heap). Верхняя граница, выше которой JVM память не возьмёт.-Xms— начальный размер кучи. Столько выделяется сразу при старте.
Записываются с суффиксом G или M:
java -Xms4G -Xmx4G -jar server.jar noguiОба флага ставятся до -jar. После -jar они игнорируются — частая причина того, что «настройка не применилась».
Почему Xms должен равняться Xmx
Стандартный совет из старых гайдов — ставить -Xms1G -Xmx6G, чтобы «сервер брал память по необходимости». Для Minecraft это плохая идея.
Каждое расширение кучи с 1 до 6 ГБ — это остановка JVM. На старте сервера, когда грузятся плагины и генерируются чанки, таких расширений будет несколько десятков, и каждое видно игрокам как рывок. Плюс сборщик мусора настраивает свои внутренние параметры под текущий размер кучи и постоянно их пересчитывает.
Правильно:
-Xms6G -Xmx6GПамять резервируется один раз при старте, дальше JVM работает в стабильных условиях. Вместе с флагом -XX:+AlwaysPreTouch из набора Aikar это убирает целый класс микрофризов — сам набор разобран в статье про Aikar's flags.
Сколько выделять: ориентиры
Ориентиры даны по памяти тарифа и совпадают со шкалой на странице тарифов: свежий мир, view-distance 8–10. Плагины и моды примерно удваивают расход памяти, поэтому с ними тот же объём держит заметно меньше людей. Значение -Xmx — с запасом вне кучи, о нём ниже.
| Память тарифа | Ваниль, Paper без плагинов | С плагинами или модами | -Xmx |
|---|---|---|---|
| 2 ГБ | до 5 игроков | только ваниль | -Xmx1600M |
| 4 ГБ | до 15 | до 5 | -Xmx3G |
| 6 ГБ | до 25 | до 10 | -Xmx5G |
| 8 ГБ | до 40 | до 15 | -Xmx6G–-Xmx7G |
| 12 ГБ | до 70 | до 25 | -Xmx10G |
| 16 ГБ | до 100 | до 40 | -Xmx13G |
| 24 ГБ | 150 и больше | до 70 | -Xmx20G |
Fabric с оптимизационными модами расходует память экономнее Forge при том же числе модов. Тяжёлые сборки на 150+ модов вроде All the Mods ориентируйте на нижние строки колонки «с модами» — от 12 ГБ. После 100–150 игроков на одном сервере эффективнее разбить проект на несколько серверов за прокси.
Развёрнутые расчёты с учётом плагинов и размера карты — в статье сколько RAM нужно Minecraft-серверу.
Оставьте запас вне кучи
Главная ошибка при аренде: тариф на 4 ГБ, а в параметрах стоит -Xmx4G. Java берёт под кучу не всю доступную память — сверх -Xmx уходит:
- Metaspace под классы плагинов и модов: 100–500 МБ
- Стеки потоков: около 1 МБ на поток, потоков десятки
- Прямые буферы под сетевой стек: сотни мегабайт при большом онлайне
- Сама операционная система, если сервер на VPS
Практическое правило: -Xmx = 80–85% от доступной памяти. Готовые значения для каждого объёма — в колонке -Xmx таблицы выше.
Если выставить -Xmx в потолок тарифа, процесс рано или поздно убьёт OOM-killer системы — сервер просто исчезнет из консоли без внятной ошибки в логе.
Почему «больше» не значит «лучше»
Дать серверу на 15 человек 16 ГБ вместо 4 — не ускорение. С правильными флагами G1 спокойно работает с большой кучей, и PaperMC в описании Aikar's flags прямо пишет, что после определённого объёма прирост прекращается: лишние гигабайты просто лежат без дела, а вы за них платите.
Признак избыточной памяти: в /spark healthreport использование кучи стабильно ниже 30% и почти не растёт — половина выделенного не используется.
Признак нехватки: использование постоянно у потолка, GC срабатывает несколько раз в секунду, TPS плавает. Тогда память добавлять надо.
Где менять параметры
В панели управления. Обычно память задаётся ползунком тарифа, а флаги — отдельным полем (Java Flags, JVM Arguments, «Параметры запуска»). При смене тарифа -Xmx часто подставляется автоматически.
В скрипте запуска. Файл start.sh:
#!/bin/bash
java -Xms6G -Xmx6G -XX:+UseG1GC -jar paper.jar noguiВ systemd-юните. Строка ExecStart — как это оформить, описано в статье про автозапуск через systemd и screen.
После правки нужен полный рестарт: параметры JVM читаются только при старте процесса.
Проверка текущего значения
Через профилировщик прямо в игре:
/spark healthreportСтрока вида Memory: 3.2 GB / 6.0 GB показывает использование и лимит.
Через консоль сервера с root-доступом:
ps aux | grep javaВ выводе будут видны фактические флаги запущенного процесса. Если там не то, что вы прописали, значит панель переопределяет параметры или скрипт запускает другой файл.
OutOfMemoryError: что делать
Ошибка в логе выглядит так:
java.lang.OutOfMemoryError: Java heap spaceПорядок разбора:
- Посмотрите, когда это происходит. Сразу после старта — мало памяти под сборку. Через несколько часов работы — вероятна утечка.
- Проверьте размер мира. Карта на 30 ГБ с бесконтрольным исследованием тянет память чанками. Помогает ворлдборд и предгенерация.
- Найдите виновника.
/spark heapsummaryпокажет, какие классы занимают больше всего. Часто это конкретный плагин или тысячи энтити одного типа. - Считайте энтити. Ферма на 5000 предметов в одном чанке съест любой объём. Лимиты правятся в конфигах — разбор в разделах про bukkit.yml и spigot.yml.
- Только потом добавляйте память. Если причина в утечке, увеличение
-Xmxлишь отодвигает падение на несколько часов.
Общий разбор проблем со стартом — в статье сервер Minecraft не запускается, а причины лагов — в материале про просадки TPS.
Память и производительность: что важнее
Частое заблуждение — что TPS зависит от объёма памяти. Не зависит, пока памяти достаточно. Minecraft упирается в однопоточную производительность процессора: тик мира считается в одном потоке, и никакие гигабайты этого не изменят.
Память нужна, чтобы:
- Держать загруженные чанки без постоянной перезагрузки с диска
- Вмещать плагины, моды и их данные
- Дать сборщику пространство для манёвра
Как только эти условия выполнены, дальнейшее увеличение ничего не даёт. Что действительно решает — разобрано в статье про процессор для игрового сервера.
Чек-лист
-Xmsравен-Xmx- Оба флага стоят до
-jar -Xmxне превышает 85% доступной памяти тарифа- Значение соответствует типу сборки, а не «взято с запасом»
- После правки был полный рестарт, а не
/reload /spark healthreportпоказывает использование кучи в диапазоне 40–75%
Если по расчётам текущего тарифа не хватает, подобрать вариант с нужным объёмом памяти можно на странице цен.