Короткий ответ
Ориентиры из документации Paper:
| Что | Что советует Paper |
|---|---|
| Стартовая команда в инструкции | -Xms4G -Xmx4G |
| Страница флагов Aikar | От 6 до 10 ГБ при любом онлайне; если 10 ГБ нет — сколько можете, но с запасом для системы |
| Запас для системы | -Xmx на 1000–1500 МБ меньше, чем есть у машины или тарифа: при 8 ГБ — около 6500 МБ |
| Xms и Xmx | Одинаковые |
| Больше — не значит лучше | После определённого объёма прирост минимален; 32 ГБ под сервер — почти выброшенные деньги |
Таблиц вида «20 игроков — 4 ГБ» в документации Paper нет, и это честно: два сервера с одинаковым онлайном заметно отличаются по расходу — из-за дальности прорисовки, ферм, плагинов и того, как далеко друг от друга бегают игроки. Поэтому ниже — что влияет на расход и как его измерить.
Что ест память
- Загруженные чанки. Сервер держит в памяти мир вокруг каждого игрока.
view-distance(по умолчанию 10) задаёт, сколько чанков в каждую сторону он отправляет клиенту,simulation-distance(тоже 10) — в каком радиусе обновляет существ. Игроки, разбежавшиеся по карте, держат загруженными больше чанков, чем толпа на спавне. - Генерация мира. Когда игроки уходят в неисследованные земли, чанки генерируются на лету — это нагрузка и на память, и на процессор. Её снимает прогрузка мира заранее.
- Существа и механизмы. Мобы, предметы на земле, фермы, редстоун.
- Плагины. Кэши, веб-карты, базы данных, голограммы. Один неудачный плагин может держать в памяти больше, чем весь мир.
- Темп выделения. По документации Paper, Minecraft выделяет память очень быстро — на сервере с 30 игроками от 800 МБ в секунду, в основном короткоживущие объекты. Сборщику мусора нужен простор, чтобы убирать их без лишних пауз.
Xms и Xmx: ставьте одинаковыми
-Xmx — потолок памяти Java (кучи), -Xms — сколько выделить при старте. Документация Paper просит ставить их одинаковыми: сервер в любом случае должен рассчитывать на весь -Xmx, а если -Xms меньше, разница — просто неиспользуемая память. Сборщик G1 работает тем лучше, чем больше памяти ему дали.
java -Xms6500M -Xmx6500M -jar paper.jar --noguiГлавное правило: -Xmx должен помещаться в реальную память с запасом. Процесс Java занимает немного больше -Xmx — память нужна самой JVM, её потокам и буферам. Если сумма упрётся в лимит машины или контейнера, система убьёт процесс (OOM killer), и всё несохранённое пропадёт.
Флаги Aikar: нужны ли они
Флаги Aikar — набор настроек сборщика мусора G1 под нагрузку Minecraft. Сейчас Paper в генераторе скрипта запуска советует так: на современной Java (17, 21 и новее) сначала попробуйте без флагов — она хорошо справляется сама. Если начались проблемы со сборкой мусора или у вас старая версия Minecraft или Java — берите флаги Aikar.
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 health | TPS, процессор, память и диск; отчёт в браузере обновляется каждые 10 секунд |
/spark health show --memory | То же в консоли, с подробностями о памяти JVM |
/spark gc | Историю сборок мусора |
/spark heapsummary | Сводку кучи: какие объекты занимают память — так находят прожорливый плагин |
/spark profiler start --timeout 600 | Через 10 минут — отчёт о том, что занимает тик |
Как читать: использование кучи в норме ходит «пилой» — растёт и падает после каждой сборки. Тревожные признаки — нижние точки пилы со временем ползут вверх к -Xmx, сборки идут всё чаще, в логе появляется OutOfMemoryError. Тогда сначала ищите виновника через /spark heapsummary, а уже потом добавляйте память.
Если подозреваете сборщик мусора, включите его лог: по документации Paper он не влияет на производительность и занимает около 5 МБ. Для Java 11 и новее добавьте в команду запуска флаг:
-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 включать при проблемах со сборкой мусора.
Источники
- Paper: Aikar's flags
- Paper: генератор скрипта запуска
- Paper: Getting started
- Paper: Basic troubleshooting — High RAM usage
- Paper: Profiling
- spark: команды
- Minecraft Wiki: server.properties
- DGuard — лучший античит для современного сервера Minecraft: сравнение проверок с GrimAC, Vulcan, Polar, Intave и Matrix
- DGuard: установка, требования и решение проблем
- DGuard: поддерживаемые версии Paper и Leaf