- Что такое start.bat и зачем он нужен
- SERVER_FILE_NAME — что это и как выбрать имя ядра
- Различия между Windows (батник) и Linux (bash)
- Минимальная и рекомендуемая память для сервера Minecraft
- Как выбрать значения Xmx и Xms
- Флаги JVM для производительности: что и зачем
- Пример start.bat с флагами для Windows
- Пример start.sh с циклом перезапуска для Linux
- Как правильно использовать автоматический перезапуск
- Важные советы по памяти и производительности
- Ведение журнала сборки мусора (GC logging)
- Как правильно структурировать скрипты и где их хранить
- Пример итогового файла start.bat с пояснениями
- Частые ошибки и как их исправлять
- Итог: как сделать start.bat для Minecraft-сервера
- Полезные ссылки
Если вы хотите запустить свой Minecraft-сервер и не потеряться в куче настроек, этот пост — для вас. Мы разберём, что такое start.bat (и start.sh для Linux), как правильно выбрать имя ядра сервера, сколько памяти выделять, какие флаги JVM использовать и как сделать так, чтобы сервер не падал и автоматически перезапускался. Всё просто, понятно и с примерами!
Что такое start.bat и зачем он нужен
Start.bat — это простой скрипт (батник) для Windows, который служит лаунчером вашего Minecraft-сервера. Он запускает Java с нужными параметрами и указывает, какой файл ядра (jar) использовать. Аналогично для Linux — это shell-скрипт start.sh.
Почему это важно? Потому что без такого файла запускать сервер вручную — это как пытаться открыть банку с вареньем зубочисткой. Батник автоматизирует процесс, задаёт параметры памяти, флаги JVM и даже может перезапускать сервер при сбоях.
SERVER_FILE_NAME — что это и как выбрать имя ядра
В скрипте вы увидите переменную или просто название SERVER_FILE_NAME.jar
. Это имя вашего серверного ядра — например, spigot.jar
, paper.jar
или minecraft_server.jar
.
Важно:
- Имя должно точно совпадать с файлом jar в папке сервера.
- Если вы обновляете ядро, не забудьте поменять имя в батнике!
- Для удобства можно использовать переменную
SERVER_FILE_NAME
в скрипте, чтобы не менять имя в нескольких местах.
Различия между Windows (батник) и Linux (bash)
Особенность | Windows (start.bat) | Linux (start.sh / bash) |
---|---|---|
Синтаксис | Команды Windows batch | Bash-скрипты |
Автоматический перезапуск | Используется goto и start /wait |
Цикл while true; do ... done |
Остановка окна | Команда PAUSE (задержка окна) |
Обычно не нужна, можно использовать read |
Путь к файлам | Обработка пробелов в путях через кавычки | Использование cd и относительных путей |
Логирование | Можно выводить в консоль, писать в файл | Использование echo и sleep для задержек |
Минимальная и рекомендуемая память для сервера Minecraft
- Минимум: 6 ГБ оперативной памяти — это базовый порог для стабильной работы современных серверов, даже если игроков мало.
- Рекомендуется: 6–10 ГБ — оптимальный объём для плавной работы и эффективного использования сборщика мусора G1GC.
- Почему не больше? Увеличение памяти сверх 10–12 ГБ не даёт пропорционального прироста производительности — наступает точка убывающей отдачи. Это значит, что вы тратите деньги на лишнюю память, а сервер не становится заметно быстрее.
Как выбрать значения Xmx и Xms
-Xmx
— максимальный объём памяти, который сервер может использовать.-Xms
— начальный объём памяти при запуске.
Рекомендации:
- Обычно ставьте
-Xmx
и-Xms
одинаковыми, чтобы избежать затрат на динамическое расширение памяти. - Для сервера с 8 ГБ выделите
-Xmx8G -Xms8G
. - Если у вас меньше 12 ГБ оперативной памяти, не стоит заморачиваться с дополнительными флагами — просто выделите максимально возможный объём, оставив ОС немного свободной памяти.
Флаги JVM для производительности: что и зачем
PaperSpigot и Spigot рекомендуют использовать набор флагов, которые оптимизируют работу сборщика мусора G1GC и повышают стабильность сервера.
Основные флаги и их назначение
Флаг | Назначение |
---|---|
-XX:+UseG1GC |
Включает сборщик мусора G1GC, оптимальный для Minecraft |
-XX:+ParallelRefProcEnabled |
Параллельная обработка ссылок для ускорения GC |
-XX:MaxGCPauseMillis=200 |
Целевое максимальное время паузы на сборку мусора (200 мс) |
-XX:+UnlockExperimentalVMOptions |
Разблокирует экспериментальные опции JVM |
-XX:+DisableExplicitGC |
Отключает явные вызовы сборщика мусора из кода сервера |
-XX:+AlwaysPreTouch |
Предварительное выделение памяти для уменьшения задержек |
-XX:G1NewSizePercent=30 |
Размер нового поколения в куче (30%) |
-XX:G1MaxNewSizePercent=40 |
Максимальный размер нового поколения (40%) |
-XX:G1HeapRegionSize=8M |
Размер региона кучи (8 МБ) |
-XX:G1ReservePercent=20 |
Резерв памяти для G1GC (20%) |
-XX:G1HeapWastePercent=5 |
Максимальный процент "потерь" памяти |
-XX:G1MixedGCCountTarget=8 |
Количество смешанных сборок мусора |
-XX:InitiatingHeapOccupancyPercent=15 |
Процент заполнения кучи для запуска смешанной GC |
-XX:G1MixedGCLiveThresholdPercent=90 |
Порог живых объектов для смешанной GC |
-XX:G1RSetUpdatingPauseTimePercent=5 |
Время обновления вспомогательных структур GC |
-XX:SurvivorRatio=32 |
Соотношение между survivor space и eden space |
-XX:MaxTenuringThreshold=1 |
Максимальное количество копирований объекта в survivor before promotion |
-Dusing.aikars.flags=true |
Включает набор оптимизаций от Aikar (известный оптимизатор JVM для Minecraft) |
-Daikars.new.flags=true |
Включает новые флаги Aikar |
Пример start.bat с флагами для Windows
@echo off
cls
title Minecraft Server
java -Xmx8G -Xms8G -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=8 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=true -Daikars.new.flags=true -jar spigot.jar nogui
pause
pause
— задерживает окно после закрытия сервера, чтобы увидеть ошибки. В продакшене можно убрать.
Пример start.sh с циклом перезапуска для Linux
#!/bin/bash
while true; do
java -Xmx8G -Xms8G -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=8 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=true -Daikars.new.flags=true -jar spigot.jar nogui
echo "Сервер упал или остановлен. Перезапуск через 5 секунд..."
sleep 5
done
- Цикл
while true
обеспечивает автоматический перезапуск сервера после сбоев. - Важно: такой цикл может привести к бесконечным рестартам, если проблема не решена. Рекомендуется добавить логику ограничения количества рестартов.
Как правильно использовать автоматический перезапуск
Автоматический перезапуск — палка о двух концах. Он помогает держать сервер онлайн, но может привести к:
- Повторным рестартам без остановки (crash loop).
- Потере данных, если сервер не успевает сохранить мир.
Рекомендации:
- Используйте скрипты с задержкой между рестартами (
sleep 5
). - Добавьте проверку количества рестартов за период.
- Делайте регулярные бэкапы мира.
- Рассмотрите альтернативы: systemd, screen, tmux для управления процессом.
Важные советы по памяти и производительности
Вопрос | Ответ |
---|---|
Почему не стоит выделять >12 ГБ? | Точка убывающей отдачи: больше памяти — не всегда лучше, GC начинает работать хуже |
Что делать при <12 ГБ памяти? | Выделяйте максимально возможный объём, не настраивайте сложные флаги |
Нужно ли Xmx и Xms одинаковые? | Рекомендуется одинаковые для стабильности и предсказуемости |
Как учитывать память ОС? | Оставьте 1-2 ГБ свободными для системы, чтобы избежать свопинга и тормозов |
Ведение журнала сборки мусора (GC logging)
Полезно для диагностики проблем с производительностью.
- Для Java 8–10:
-Xloggc:gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=1M
- Для Java 11+:
-Xlog:gc*:logs/gc.log:time,uptime:filecount=5,filesize=1M
Как правильно структурировать скрипты и где их хранить
- Поместите
start.bat
илиstart.sh
в ту же папку, что и jar-файл сервера. - В скрипте указывайте имя jar-файла точно.
- Для Linux скриптов используйте абсолютные пути или корректно меняйте директорию через
cd
. - В Windows учитывайте пробелы в путях — используйте кавычки.
Пример итогового файла start.bat с пояснениями
@echo off
cls
title Minecraft Server
REM Укажите имя вашего серверного ядра
set SERVER_FILE_NAME=spigot.jar
REM Выделяем 8 ГБ памяти, используем оптимальные флаги JVM
java -Xmx8G -Xms8G -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=8 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=true -Daikars.new.flags=true -jar %SERVER_FILE_NAME% nogui
pause
Частые ошибки и как их исправлять
- Неправильное имя jar-файла: сервер не запускается — проверьте имя в скрипте.
- Недостаточно памяти: сервер падает с ошибкой OutOfMemory — увеличьте
-Xmx
или уменьшите нагрузку. - Бесконечные рестарты: добавьте задержку в цикле или ограничьте количество попыток.
- Проблемы с путями: используйте кавычки в Windows, корректно меняйте директории в Linux.
Итог: как сделать start.bat для Minecraft-сервера
- Скачайте ядро сервера (spigot.jar, paper.jar и т.п.).
- Создайте файл
start.bat
(Windows) илиstart.sh
(Linux). - Впишите команду запуска с нужными параметрами памяти и флагами JVM.
- Укажите правильное имя jar-файла (SERVER_FILE_NAME).
- Добавьте автоматический перезапуск, если нужно, с задержкой.
- Оставьте немного памяти для ОС, не выделяйте слишком много.
- Используйте рекомендуемые флаги PaperSpigot для производительности.
- Тестируйте скрипт, проверяйте логи и корректируйте настройки.
Полезные ссылки
- mcdev.su — старт батник и флаги для Minecraft
- forum-minecraft.ru — обсуждение start.bat и start.sh
- spigotmc.org — пример start.bat с watchdog
Теперь вы вооружены знаниями, чтобы сделать свой start.bat или start.sh для Minecraft-сервера мощным, стабильным и удобным. Запускайте, играйте и пусть ваш сервер никогда не падает!