DGuard

Сколько памяти нужно серверу Minecraft

Универсального числа «на N игроков» нет: расход памяти зависит от онлайна, дальности прорисовки, плагинов и того, сколько мира загружено одновременно. Документация Paper начинает с 4 ГБ, а на странице флагов Aikar советует 6–10 ГБ при любом онлайне. Дальше — замеряйте spark и добавляйте память, только если её действительно не хватает.

Команда DGuard6 мин

Короткий ответ

Ориентиры из документации Paper:

ЧтоЧто советует Paper
Стартовая команда в инструкции-Xms4G -Xmx4G
Страница флагов AikarОт 6 до 10 ГБ при любом онлайне; если 10 ГБ нет — сколько можете, но с запасом для системы
Запас для системы-Xmx на 1000–1500 МБ меньше, чем есть у машины или тарифа: при 8 ГБ — около 6500 МБ
Xms и XmxОдинаковые
Больше — не значит лучшеПосле определённого объёма прирост минимален; 32 ГБ под сервер — почти выброшенные деньги
По страницам Getting started и Aikar's flags в документации Paper

Таблиц вида «20 игроков — 4 ГБ» в документации Paper нет, и это честно: два сервера с одинаковым онлайном заметно отличаются по расходу — из-за дальности прорисовки, ферм, плагинов и того, как далеко друг от друга бегают игроки. Поэтому ниже — что влияет на расход и как его измерить.

Что ест память

  • Загруженные чанки. Сервер держит в памяти мир вокруг каждого игрока. view-distance (по умолчанию 10) задаёт, сколько чанков в каждую сторону он отправляет клиенту, simulation-distance (тоже 10) — в каком радиусе обновляет существ. Игроки, разбежавшиеся по карте, держат загруженными больше чанков, чем толпа на спавне.
  • Генерация мира. Когда игроки уходят в неисследованные земли, чанки генерируются на лету — это нагрузка и на память, и на процессор. Её снимает прогрузка мира заранее.
  • Существа и механизмы. Мобы, предметы на земле, фермы, редстоун.
  • Плагины. Кэши, веб-карты, базы данных, голограммы. Один неудачный плагин может держать в памяти больше, чем весь мир.
  • Темп выделения. По документации Paper, Minecraft выделяет память очень быстро — на сервере с 30 игроками от 800 МБ в секунду, в основном короткоживущие объекты. Сборщику мусора нужен простор, чтобы убирать их без лишних пауз.

Xms и Xmx: ставьте одинаковыми

-Xmx — потолок памяти Java (кучи), -Xms — сколько выделить при старте. Документация Paper просит ставить их одинаковыми: сервер в любом случае должен рассчитывать на весь -Xmx, а если -Xms меньше, разница — просто неиспользуемая память. Сборщик G1 работает тем лучше, чем больше памяти ему дали.

Тариф на 8 ГБ — Paper советует около 6500 МБ
java -Xms6500M -Xmx6500M -jar paper.jar --nogui

Главное правило: -Xmx должен помещаться в реальную память с запасом. Процесс Java занимает немного больше -Xmx — память нужна самой JVM, её потокам и буферам. Если сумма упрётся в лимит машины или контейнера, система убьёт процесс (OOM killer), и всё несохранённое пропадёт.

Флаги Aikar: нужны ли они

Флаги Aikar — набор настроек сборщика мусора G1 под нагрузку Minecraft. Сейчас Paper в генераторе скрипта запуска советует так: на современной Java (17, 21 и новее) сначала попробуйте без флагов — она хорошо справляется сама. Если начались проблемы со сборкой мусора или у вас старая версия Minecraft или Java — берите флаги Aikar.

Флаги Aikar из документации Paper: замените 10G на свой объём, paper.jar — на имя своего файла
java -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 -jar paper.jar --nogui

Почему много памяти — не лучше

Памяти мало — плохо: сборщик мусора запускается слишком часто, тики проседают, а в худшем случае сервер падает с OutOfMemoryError. Но и лишняя память сервер не ускоряет: документация Paper прямо пишет, что после определённого объёма отдача падает.

Опаснее всего отдать Java всё, что есть: тогда сервер упадёт не от нехватки кучи, а потому что его процесс убьёт система. Отсюда правило про 1000–1500 МБ запаса — или хостер добавляет этот запас сверх тарифа.

И память — не единственный ресурс. Лаги чаще упираются в основной поток: если тик длиннее 50 мс, TPS падает ниже 20, и новые гигабайты не помогут. Где искать причину — в статье почему лагает сервер, а на что смотреть при выборе железа — в статье хостинг или VPS.

Как узнать реальный расход

Счётчик в панели хостинга мало что скажет: процесс Java занимает всю выделенную память и не отдаёт её системе — по документации Paper это нормально и не утечка. Смотреть нужно на кучу и сборку мусора. Для этого в Paper с 1.21 встроен профайлер spark:

КомандаЧто показывает
/spark healthTPS, процессор, память и диск; отчёт в браузере обновляется каждые 10 секунд
/spark health show --memoryТо же в консоли, с подробностями о памяти JVM
/spark gcИсторию сборок мусора
/spark heapsummaryСводку кучи: какие объекты занимают память — так находят прожорливый плагин
/spark profiler start --timeout 600Через 10 минут — отчёт о том, что занимает тик
По документации spark и Paper

Как читать: использование кучи в норме ходит «пилой» — растёт и падает после каждой сборки. Тревожные признаки — нижние точки пилы со временем ползут вверх к -Xmx, сборки идут всё чаще, в логе появляется OutOfMemoryError. Тогда сначала ищите виновника через /spark heapsummary, а уже потом добавляйте память.

Если подозреваете сборщик мусора, включите его лог: по документации Paper он не влияет на производительность и занимает около 5 МБ. Для Java 11 и новее добавьте в команду запуска флаг:

Лог сборщика мусора — пишется в logs/gc.log
-Xlog:gc*:logs/gc.log:time,uptime:filecount=5,filesize=1M

Как снизить расход

  • Уменьшите view-distance и simulation-distance в server.properties — это самый сильный рычаг.
  • Прогрузите мир заранее и ограничьте его размер, чтобы сервер не генерировал чанки во время игры.
  • Найдите через /spark heapsummary и профайлер плагин, который держит больше всех, — обновите, настройте или замените его.
  • Ограничьте фермы и скопления мобов правилами или настройками сервера.

Античит тоже стоит проверить: он разбирает каждый пакет каждого игрока. Проверки DGuard считаются в сетевых потоках, а не в основном потоке сервера, поэтому TPS держится на 20: на живом сервере это 0,03 % одного ядра на основном потоке — 0,38 мс из 10,9 мс тика при 121 игроке. Время проверок на вашем сервере покажет /dguard perf; подробнее — в статье нагрузка античита.

Частые вопросы

Сколько памяти нужно серверу Minecraft на 10–20 игроков?

Документация Paper начинает с 4 ГБ, а на странице флагов Aikar советует 6–10 ГБ при любом онлайне. Точный объём зависит от дальности прорисовки, плагинов и мира — проверьте расход через /spark health под реальным онлайном.

Нужно ли ставить Xms равным Xmx?

Да, так советует документация Paper: сервер всё равно должен рассчитывать на весь Xmx, а память между Xms и Xmx простаивает.

Почему сервер занимает всю выделенную память?

Так устроена Java: куча растёт до выделенного объёма, а сборщик мусора редко возвращает память системе. По документации Paper это нормально, если нет вылетов с OutOfMemoryError и долгих пауз на сборку.

Что будет, если выделить слишком много памяти?

Сервер не станет быстрее: после определённого объёма прирост минимален. А если не оставить системе 1000–1500 МБ, процесс Java может убить сама система из-за нехватки памяти.

Нужны ли флаги Aikar на Java 21?

Не обязательно. Paper советует на современной Java (17, 21 и новее) сначала попробовать без флагов, а флаги Aikar включать при проблемах со сборкой мусора.

Источники

Все разделы
Создание сервера7 минХостинг или VPS для сервера Minecraft: что выбратьИгровой хостинг — быстрый старт через панель, но с общими ресурсами и ограничениями. VPS или выделенный сервер — полный контроль, но систему, защиту и бэкапы настраиваете сами. В обоих случаях смотрите на однопоточную производительность процессора, гарантированную память, быстрый диск, защиту от DDoS и расстояние до игроков.ЧитатьОптимизация6 минПочему лагает сервер Minecraft и как найти причинуСначала поймите, что лагает: сервер (низкий TPS), сеть (пинг) или компьютер игрока (FPS). Если сервер — измерьте MSPT и снимите профиль spark: он покажет, что съедает 50 мс тика.ЧитатьОптимизация6 минПрогрузка мира и граница: как убрать лаги от генерации чанковГенерация новых чанков — одна из самых тяжёлых операций сервера. Поставьте границу мира, прогрузите всё внутри неё плагином Chunky до открытия — и игроки на элитрах больше не уронят TPS.Читать

Поставьте лучший античит для современного Minecraft

DGuard ловит все 47 видов читов из нашего сравнения — у ближайшего соперника, Intave, 27. Полная защита на любом тарифе, до 30 игроков онлайн — бесплатно.