Сервер All the Mods 10 - это zip-архив ServerFiles из сборки, Java 21 и один стартовый скрипт. Актуальный на момент написания релиз, ATM10 8.2, работает на Minecraft 1.21.1 и NeoForge 21.1.251, в папке сервера лежит 464 мода; архив занимает около 1,2 ГБ и уже содержит установщик NeoForge. Вы распаковываете его, запускаете startserver.sh, принимаете EULA и ждёте несколько минут первого запуска. Память задаётся в user_jvm_args.txt, где по умолчанию стоит -Xms4G -Xmx8G. Считайте 8 ГБ heap нижней границей для небольшой группы и выделяйте под него контейнер минимум на 2 ГБ больше. Большая часть проблем связана с тем, что скрипт делает без предупреждения, и в этом руководстве мы разберём всё по порядку.
Общая картина по ATM (какие сборки существуют, почему chunk loading за месяцы замедляет сервер, как безопасно обновляться) описана в статье Сервер All the Mods: установка ATM10 и ATM9. Работа с модпаками в целом, например сборка сервера из клиентского экспорта, разобрана в статье серверы модпаков с CurseForge или Modrinth. Здесь мы подробнее остановимся на самой установке ATM10: что делает каждый файл, что делает каждая строка скрипта и что стоит изменить.
Как скачать правильные серверные файлы#
ATM10 опубликована на CurseForge. У каждого релиза основной файл - клиентская сборка, а серверная приложена отдельно как дополнительный файл с именем ServerFiles-<version>.zip. Для 8.2 это ServerFiles-8.2.zip. На вкладке Files страницы сборки откройте релиз, на котором играют ваши игроки, и ищите в разделе Additional Files. Не собирайте сервер из клиентского архива. В серверных файлах клиентские моды уже убраны, и к ним прилагаются скрипты и файл с аргументами JVM.
Версия должна совпадать точно. С момента выхода у ATM10 были десятки релизов (5.x, 6.x, 7.x и теперь 8.x), а приложение CurseForge обновляет клиенты игроков, как только появляется новый. Сервер на 8.1 не пустит игроков с 8.2 или пустит, но потом выдаст ошибки из-за несовпадения контента. Запишите версию в своём Discord и обновляйте сервер и игроков в один день.
Есть и ответвления со своими серверными файлами. ATM10 Lite - более компактная сборка, ATM10 To The Sky - вариант со скайблоком, а теперь есть ещё и издание Aeronautics. Всё написанное ниже относится ко всем ним, но номера версий, число модов и требования к памяти отличаются. Читайте стартовый скрипт в том архиве, который скачали, и не считайте, что он совпадает с описанным здесь.
Что лежит в архиве 8.2:
| Путь | Что это |
|---|---|
mods/ | 464 jar-файла, клиентские моды уже убраны |
config/, defaultconfigs/ | Конфигурация сборки; defaultconfigs/ задаёт исходные конфиги для каждого мира |
kubejs/ | Изменения рецептов и лута, от которых зависит сборка |
datapacks/ | Датапаки сборки, копируются в новые миры |
neoforge-21.1.251-installer.jar | Установщик загрузчика, скачивать ничего не нужно |
startserver.sh, startserver.bat | Скрипты установки и запуска для Linux и Windows |
user_jvm_args.txt | Флаги памяти и сборщика мусора |
server-icon.png | Иконка в списке серверов |
Файлов eula.txt и server.properties и мира здесь нет. Первый запуск создаёт все три.
NeoForge и Java 21#
Minecraft 1.21.1 требует Java 21, и скрипт ATM10 это проверяет. Он выполняет java -fullversion, берёт основную версию и отказывается стартовать на версии ниже 21 с сообщением Minecraft 1.21 requires Java 21 - found Java 17. Если Java нет вообще, вы увидите Minecraft 1.21 requires Java 21 - Java not found. Проверка написана как -ge 21, поэтому более новая Java её проходит. Но NeoForge для 1.21.1 собирали и тестировали на 21, так что запускайте именно Java 21. Если на машине установлено несколько Java, укажите скрипту нужную через переменную окружения ATM10_JAVA с полным путём к бинарному файлу java.
Версия загрузчика зафиксирована в первых строках скрипта:
NEOFORGE_VERSION=21.1.251# To use a specific Java runtime, set an environment variable named ATM10_JAVA# To disable automatic restarts, set an environment variable named ATM10_RESTART to false.# To install the pack without starting the server, set ATM10_INSTALL_ONLY to true.Не обновляйте NeoForge самостоятельно. Каждый релиз ATM фиксирует конкретную сборку. При переходе с 8.1 на 8.2 версия сменилась с 21.1.249 на 21.1.251, и сборку тестировали именно на ней. Более новая версия обычно работает, но когда нет, вы получаете краш, которого не видел больше никто на этой версии сборки. В статье установка сервера NeoForge объясняются установщик и структура libraries/, которую он создаёт. Для сервера ATM правило простое: запускайте ту сборку, которую называет скрипт.
Что на самом деле делает startserver.sh#
Скрипт короткий. Если прочитать его один раз, станет понятна большая часть проблем первого запуска. По порядку:
- Он проверяет, что Java есть.
- Если папки
libraries/нет, он устанавливает NeoForge. Берёт встроенный установщик, если он есть, а иначе скачивает его сmaven.neoforged.net, затем запускаетjava -jar neoforge-21.1.251-installer.jar -installServer. - Если нет
server.properties, он записывает файл из пяти строк:allow-flight=true,motd=All the Mods 10,max-tick-time=180000,simulation-distance=5иview-distance=8. - Если
ATM10_INSTALL_ONLY=true, на этом он останавливается. - Он проверяет, что версия Java не ниже 21.
- Он запускает сервер в цикле. Когда процесс завершается, скрипт ждёт 10 секунд и запускает его снова, если не задано
ATM10_RESTART=false.
Стоит разобраться со строкой запуска:
java @user_jvm_args.txt \ @libraries/net/neoforged/neoforge/21.1.251/unix_args.txt noguiСерверного jar-файла здесь нет. Аргументы с @ - это файлы аргументов Java. В первом лежат ваши флаги памяти и GC. Во втором, который создаёт установщик, хранятся classpath и главный класс для этой конкретной сборки NeoForge. Номер версии входит в этот путь, и именно это порождает проблему обновления, о которой речь пойдёт ниже в разделе о крашах.
Три особенности ставят людей в тупик:
- Значения по умолчанию записываются только один раз. Если
server.propertiesуже существует, например от стандартной установки хостинга или прежнего сервера, скрипт его не трогает. Вы не получите ниallow-flight=true, ни 180-секундного watchdog, и первый же полёт на джетпаке закончится киком игрока за полёт. Добавьте эти строки сами. - Цикл перезапуска не интересуется, почему сервер остановился. При самом первом запуске сервер записывает
eula.txtсeula=falseи завершается, а скрипт перезапускает его каждые 10 секунд, бесконечно, пока вы не отредактируете этот файл. Если в панели есть собственная обработка перезапусков, цикл скрипта и цикл панели могут также мешать друг другу. Когда процессом управляет панель или systemd, задайтеATM10_RESTART=falseи пусть перезапуском занимается управляющая система. - Под `set -eu` скрипт останавливается на ошибках, кроме строки с Java, где код выхода перехватывается намеренно, чтобы цикл мог продолжаться. Поэтому падающий сервер тихо перезапускается каждые 10 секунд. Смотрите в лог, а не на аптайм.
Чистая первая установка на вашей собственной Linux-машине выглядит так:
$ mkdir -p /srv/atm10 && cd /srv/atm10$ unzip ~/ServerFiles-8.2.zip$ chmod +x startserver.sh$ ATM10_INSTALL_ONLY=true ./startserver.sh # install NeoForge, write properties$ echo "eula=true" > eula.txt # after reading the EULA$ ATM10_RESTART=false ./startserver.shЕсли сначала выполнить установку и принять EULA до настоящего запуска, цикл перезапуска будет пропущен, и сервер сразу перейдёт к созданию мира.
user_jvm_args.txt строка за строкой#
ATM10 поставляется с таким файлом (комментарии убраны):
-Xms4G-Xmx8G-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Это широко распространённые флаги G1, настроенные для Minecraft, их часто называют флагами Aikar. Менять нужно только две строки.
- `-Xmx` - потолок heap. Именно это число решает, хватит ли памяти сборке. Увеличивайте его при росте числа игроков или в зрелом мире. Никогда не задавайте его равным всей памяти машины или контейнера.
- `-Xms` - начальный heap. В сочетании с
-XX:+AlwaysPreTouchJVM занимает и обращается ко всей памяти-Xmsпри запуске. С поставляемыми значениями 4 ГБ выделяются ещё до загрузки первого мода. Приравнять-Xmsк-Xmx- частая практика, она избавляет от изменения размера, но тогда весь heap занят с первой секунды. Убедитесь, что в контейнере действительно столько памяти плюс накладные расходы, иначе сервер будет убит при старте, а не через час. - Флаги G1 не трогайте, если только вы не проводите измерения. Они подходят для heap от 6 до 16 ГБ. Если вы выходите за 12 ГБ, некоторые руководства советуют поднять
G1HeapRegionSizeдо16Mи увеличить проценты нового поколения, но это шаг тонкой настройки, а не лекарство от лагов. В статье флаги JVM и версии Java объясняется, что меняет каждый из них.
Есть одно правило о том, где задавать память. Если панель или обёртка тоже передаёт -Xmx в командной строке, два значения конкурируют, и результат зависит от порядка. Выберите одно место, обычно этот файл, и уберите другое.
RAM и CPU по числу игроков#
Поставляемое значение -Xmx8G авторы сборки считают рабочим минимумом, и опыт это подтверждает. Меньше 8 ГБ ATM10 запускается, но как только игроки разойдутся по миру, сборщик мусора работает не переставая, и первый же загруженный вечер заканчивается крашем из-за нехватки памяти. Контейнеру нужно больше, чем heap, потому что Java расходует память ещё и на metaspace (классы 464 модов), стеки потоков, direct-буферы и JIT. В сборке такого размера эти накладные расходы составляют примерно от 1,5 до 2,5 ГБ.
| Игроков | -Xmx в user_jvm_args.txt | Контейнер или тариф |
|---|---|---|
| 1-3, новый мир | 8G | 10 ГБ |
| 4-8, несколько баз | 10G | 12-14 ГБ |
| 8-15, зрелый мир | 12G | 14-16 ГБ |
| 15+ или тяжёлая автоматизация | 14G+ | 16 ГБ+, сначала профилирование |
Несколько замечаний к таблице:
- Игроки обходятся дешевле, чем миры. Стоящий на месте игрок почти ничего не стоит. Игрок, который генерирует новую местность, или база, полная машин Mekanism и AE2, чанки которой принудительно загружены круглосуточно, стоят очень дорого. Четырём игрокам с крупными фабриками может потребоваться больше памяти, чем десяти, которые в основном исследуют заранее сгенерированную местность.
- Вторая половина - это CPU. Основной тик Minecraft работает в одном потоке, поэтому скорость отдельного ядра определяет, сколько автоматизации сервер потянет, прежде чем упадёт ниже 20 TPS. Дополнительные ядра помогают при генерации чанков, сборке мусора и работе сети. Рассчитывайте минимум на два быстрых ядра, а для загруженного сервера - на три и больше.
- Больше heap - не всегда лучше. Heap в 20 ГБ на сервере, использующем 9 ГБ, лишь удлиняет каждую полную сборку мусора. Подбирайте размер по данным spark, а не по размеру тарифа. В статье сколько RAM нужно серверу Minecraft рассказано, как читать эти числа.
В RE:NODE под ATM10 подходят тарифы Minecraft Pro на 10 ГБ и Premium на 14 ГБ, с 2,5 и 3,5 vCPU. Pro подходит небольшой группе с -Xmx8G. Premium годится для загруженного сервера с -Xmx12G. Тарифы от 2 до 6 ГБ эту сборку не потянут, и мы предпочитаем сказать об этом прямо, а не продавать их для неё. Если контейнер упирается в лимит памяти, ядро останавливает процесс, и сервер перезапускается начисто, а не уходит в своп, поэтому запас между -Xmx и тарифом - самая важная настройка.
Установка на панели#
На хостинговой панели шаги те же, но выполняются через файловый менеджер и консоль, а не через shell. Линейка Minecraft в RE:NODE устанавливает Paper с подходящей версией Java, принятым EULA и сгенерированным миром. Сервер ATM10 заменяет эту установку вашей собственной загрузкой. Установщика модпаков нет, и ничто на панели не читает сборки CurseForge.
- Сделайте backup стандартной установки, затем остановите сервер.
- Удалите ненужные файлы Paper: серверный jar,
plugins/и сгенерированные папки миров. - Загрузите
ServerFiles-8.2.zipчерез файловый менеджер или SFTP и распакуйте на месте. - Отредактируйте существующий
server.propertiesи добавьтеallow-flight=trueиmax-tick-time=180000, потому что скрипт не запишет их поверх существующего файла. - Задайте память в
user_jvm_args.txtтак, чтобы-Xmxбыл на 2 ГБ или больше меньше тарифа. - Убедитесь, что при запуске выполняется скрипт ATM или та же строка
java @user_jvm_args.txt @libraries/...сATM10_RESTART=false, чтобы перезапусками управляла панель. Если вкладка Startup не даёт нужных настроек, откройте тикет и попросите. - Запустите сервер и следите за консолью до строки
Done.
Подробности подключения есть в статье SFTP и файловый менеджер. Загрузка 1,2 ГБ надёжнее проходит по SFTP, чем через браузер на медленном канале.
Предварительная генерация мира#
В серверные файлы ATM10 входят spark и FTB Chunks, но нет генератора заранее. Местность в этой сборке дорогая: дополнительные руды, модовые структуры и несколько добавленных измерений. Игроки, исследующие мир на джетпаках или элитрах, генерируют чанки быстрее, чем справляется один поток тика, и все ощущают подтормаживание. Предварительная генерация переносит эту работу на время, когда на сервере никого нет.
У Chunky есть сборка для NeoForge под 1.21.1, и работает она только на сервере, так что игрокам она не нужна. Добавьте jar в mods/, перезапустите и выполните:
/chunky world minecraft:overworld/chunky center 0 0/chunky radius 4000/chunky start/chunky worldborderКоманды /chunky pause и /chunky continue позволяют остановиться к началу игры и продолжить ночью. Прогресс сохраняется при перезапуске. В ATM10 радиус 4000 блоков занимает часы, а не минуты, и файлы регионов вырастают на несколько гигабайт. Запускайте генерацию, когда никого нет онлайн, и перед началом проверьте свободное место на диске. Используйте автодополнение по Tab после /chunky world, чтобы заранее сгенерировать Незер, Энд и те модовые измерения, в которых живут ваши игроки. Измерения для добычи не трогайте, их предполагается сбрасывать. Подробнее о времени и размерах файлов написано в статье границы мира и предварительная генерация.
Проверьте также настройку очистки предметов. Сборка поставляется с Crash Utilities, где очистка предметов включена в config/crashutilities-server.toml. Каждые 5 минут, если загружено более 1000 выброшенных предметов, она предупреждает в чате и удаляет их все. Это снижает лаги от сущностей. Но это же неприятно удивляет игроков, теряющих выброшенную стопку, так что предупредите их или увеличьте maximum, если вашей группе удобнее сохранять предметы.
Частые причины крашей и их решения#
Консоль обрывается на полуслове, отчёта о краше нет. Процесс был убит извне, почти всегда из-за памяти. -Xmx плюс накладные расходы превысили лимит контейнера, часто во время генерации мира или при старте с большим -Xms. Уменьшите heap или перейдите на тариф выше. Настоящая ошибка нехватки памяти в Java, напротив, выводит java.lang.OutOfMemoryError и обычно записывает отчёт о краше.
`Error: could not open 'libraries/net/neoforged/neoforge/<version>/unix_args.txt'`. Вы обновили сборку до релиза с более новой версией NeoForge. Скрипт увидел существующую папку libraries/ и пропустил установщик, а затем попытался запустить не установленную сборку. Запустите установщик вручную (java -jar neoforge-<version>-installer.jar -installServer) или удалите libraries/ и запустите скрипт, чтобы он установил всё заново.
`has been compiled by a more recent version of the Java Runtime (class file version 65.0)`. Сервер работает на Java 17 (версия class-файла 61). Версия 65 - это Java 21. Смените среду выполнения или задайте ATM10_JAVA.
Сервер перезапускается каждые 10 секунд, и никто не может зайти. Либо в eula.txt по-прежнему false, либо сервер падает при старте, а цикл скрипта это скрывает. Прокрутите вверх до первой ошибки после сообщения о перезапуске.
`Failed to bind to port` при запуске. Другой процесс, часто вторая копия, оставшаяся после двойного цикла перезапуска, занимает порт 25565. Остановите всё, убедитесь, что ничего не запущено, и запустите один раз. На панели используйте порт, который назначает тариф, а не значение, скопированное из руководства.
Watchdog убивает сервер при интенсивной генерации. Вы видите A single server tick took 60.00 seconds и дамп потоков. max-tick-time всё ещё равен ванильному 60000, потому что скрипт так и не записал своё значение по умолчанию. Задайте 180000. Не ставьте -1: тогда по-настоящему зависший сервер будет висеть вечно.
Сервер падает, когда кто-то заходит в определённую область. Блок-сущность в этом чанке падает на каждом тике. В отчёте о краше указаны блок и его координаты. Восстановите этот регион из backup или удалите блок. Инструменты описаны в статье ошибки чанков и повреждение мира, а как найти виновный мод в трассировке стека, показано в статье разбор отчётов о крашах.
Отсутствующие записи реестра после обновления. В релизе убрали мод, а в мире остались его блоки. NeoForge предупреждает при загрузке, и подтверждение удаляет их безвозвратно. Читайте список изменений перед обновлением и храните backup, сделанный до него, пока не будете уверены.
Храните этот backup не на диске самого сервера. В RE:NODE слоты backup входят в каждый тариф, хранятся вне машины, восстанавливаются одной кнопкой, и их можно заблокировать, чтобы ротация не удалила копию перед обновлением, пока вы тестируете. В статье backup, которые действительно восстанавливаются объясняется, почему стоит проверить восстановление, прежде чем оно понадобится.
FAQ#
Какая версия Java нужна серверу All the Mods 10?
Java 21. ATM10 работает на Minecraft 1.21.1, и стартовый скрипт отказывается запускаться на более старых версиях. Более новая Java проходит проверку скрипта, но сборка и NeoForge тестируются на 21, поэтому используйте 21.
Хватит ли 6 ГБ для сервера ATM10?
Для настоящей игры нет. В контейнере на 6 ГБ с учётом накладных расходов heap пришлось бы ограничить примерно 4 ГБ. Сборка загрузится, но сборщик мусора возьмёт верх, как только игроки начнут исследовать мир. Используйте heap в 8 ГБ в контейнере от 10 ГБ.
Нужно ли отдельно скачивать NeoForge?
Нет. Серверные файлы 8.2 включают установщик NeoForge, и скрипт запускает его при первом старте. Повторный запуск нужен, только если обновление сборки переходит на новую версию NeoForge.
Где изменить RAM сервера?
В user_jvm_args.txt: строка -Xmx задаёт потолок, а -Xms - начальный heap. Если ваша панель тоже задаёт память в командной строке, используйте что-то одно, а не оба варианта.
Можно ли запускать сервер без цикла перезапуска?
Да. Задайте переменную окружения ATM10_RESTART=false, и скрипт завершится, когда остановится сервер. Делайте так всегда, когда сервер уже перезапускает панель, systemd или другой управляющий процесс.
Смогут ли игроки зайти на ATM10 To The Sky или ATM10 Lite на том же сервере?
Нет. Каждая из них - отдельная сборка со своими серверными файлами и списком модов. Игроки должны использовать ту же сборку и ту же версию, что и сервер.


