Если вы хотите запустить свой 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 для производительности.
  • Тестируйте скрипт, проверяйте логи и корректируйте настройки.

Полезные ссылки


Теперь вы вооружены знаниями, чтобы сделать свой start.bat или start.sh для Minecraft-сервера мощным, стабильным и удобным. Запускайте, играйте и пусть ваш сервер никогда не падает!