Почему крашится Minecraft сервер: полный гайд по диагностике и исправлению

Почему крашится Minecraft сервер: полный гайд по диагностике и исправлению

Ваш Minecraft сервер упал в три часа ночи, в чате паника, а вы не понимаете, что произошло. Знакомая ситуация? Мы в MineGuard работаем с сотнями серверов и видим одни и те же проблемы снова и снова. В этом гайде мы разберём все основные причины крашей и покажем, как их находить и устранять.

Как читать краш-репорты

Первое, что нужно сделать после краша, найти и прочитать краш-репорт. Сервер сохраняет их в папку crash-reports/ в корне вашего сервера. Файлы называются по дате и времени, например:

crash-reports/crash-2026-04-06_14.23.45-server.txt

Откройте последний файл. Структура краш-репорта выглядит так:

---- Minecraft Crash Report ----
Time: 4/6/26 14:23
Description: Exception in server tick loop

java.lang.OutOfMemoryError: Java heap space
    at net.minecraft.server.level.ServerLevel.tick(ServerLevel.java:382)
    at net.minecraft.server.MinecraftServer.tickChildren(MinecraftServer.java:873)

Самое важное здесь: строка Description и первая строка ошибки (в примере выше это OutOfMemoryError). Стек-трейс ниже показывает, где именно произошла ошибка. Если в стеке мелькает имя плагина, скорее всего, проблема в нём.

Если сервер не создал краш-репорт, ищите информацию в logs/latest.log. Сервер мог не успеть создать файл, если завершился аварийно (например, OOM Killer на Linux убил процесс).

Нехватка памяти (OutOfMemoryError)

Это самая частая причина крашей. Сервер съел всю выделенную оперативную память и не может продолжать работу.

Симптомы

  • В краш-репорте: java.lang.OutOfMemoryError: Java heap space
  • TPS падает постепенно перед крашем
  • В логах могут быть сообщения о GC (сборщике мусора)

Решение: Aikar Flags

Не просто увеличивайте -Xmx. Используйте оптимизированные флаги Aikar, которые настраивают сборщик мусора G1GC специально под Minecraft:

java -Xms8G -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 \
  -jar server.jar --nogui

Важный момент: -Xms и -Xmx должны быть одинаковыми. Это предотвращает постоянное изменение размера хипа.

Сколько памяти выделять

  • 1-20 игроков: 4-6 ГБ
  • 20-50 игроков: 6-10 ГБ
  • 50-100 игроков: 10-16 ГБ
  • 100+ игроков: 16+ ГБ

Эти цифры приблизительные. Тяжёлые плагины (Dynmap, Citizens) и большие миры требуют больше памяти.

Повреждённые чанки

Повреждённый чанк вызывает краш при его загрузке. Обычно это происходит, когда игрок входит в определённую область, и сервер мгновенно падает.

Симптомы

  • Краш при входе конкретного игрока
  • В логах: ChunkLoadingException или RegionFileCorruption
  • Ошибки при чтении NBT данных

Решение

Определите координаты проблемного чанка из логов или краш-репорта. Затем:

  1. MCA Selector (рекомендуем): откройте мир, найдите повреждённый чанк и удалите его. Сервер сгенерирует его заново.

  2. Region Fixer для автоматического сканирования:

python region-fixer.py /path/to/world
  1. Ручной метод: вычислите файл региона по координатам чанка. Чанк X=400, Z=800 находится в регионе r.12.25.mca (делим координаты блока на 512). Удалите этот файл из world/region/.

Профилактика

  • Делайте регулярные бэкапы
  • Не выключайте сервер командой kill, используйте stop
  • Используйте UPS или защиту от внезапного отключения питания

Конфликты плагинов

Два плагина могут пытаться изменить одно и то же, вызывая краш. Особенно часто это происходит с плагинами, которые модифицируют пакеты, обрабатывают события или меняют поведение мобов.

Симптомы

  • Краш после установки нового плагина
  • В стек-трейсе видны имена плагинов
  • Ошибки вида AbstractMethodError или NoSuchMethodError

Метод бинарного поиска

Если непонятно, какой плагин виноват:

  1. Уберите половину плагинов из папки plugins/
  2. Запустите сервер
  3. Если краш повторяется, проблема в оставшейся половине. Если нет, в убранной.
  4. Повторяйте, деля проблемную половину пополам.

За 3-4 итерации вы найдёте виновника даже среди 30+ плагинов.

Часто конфликтующие пары

  • ProtocolLib + устаревшие плагины, использующие его
  • Два античита одновременно
  • Плагины чата, использующие разные API
  • WorldEdit + плагины защиты регионов при массовых операциях

Перегрузка сущностями

Тысячи мобов, дропнутых предметов или минных вагонеток могут перегрузить сервер до краша.

Симптомы

  • TPS падает постепенно
  • В Spark профиле: entityTick занимает большую часть тика
  • Watchdog таймаут в логах

Решение

Быстрое: убить сущности командой:

/kill @e[type=!player]

Долгосрочное: настроить лимиты в bukkit.yml:

spawn-limits:
  monsters: 50
  animals: 10
  water-animals: 5
  water-ambient: 10
  ambient: 5

tick-inactive-spawners: false

Установите ClearLag или FarmControl для автоматического контроля количества сущностей.

Watchdog таймаут

Minecraft сервер ожидает, что каждый тик завершится за 50мс (20 TPS). Если один тик занимает больше 60 секунд, Watchdog принудительно завершает сервер.

Симптомы

  • В логах: A single server tick took 60.00 seconds
  • Considering it to be crashed, server will forcibly shutdown

Частые причины

  • Плагин выполняет синхронную операцию с базой данных
  • WorldEdit операция на огромном регионе
  • Чанк-генерация в тяжёлом мире (большой render distance)
  • Один плагин заблокировал главный поток

Решение

Используйте Spark для профилирования:

/spark profiler start

Подождите несколько минут, затем:

/spark profiler stop

Spark покажет, какой метод какого плагина занимает больше всего времени в серверном тике. Обычно виновник очевиден.

Stack Overflow от рекурсивных плагинов

StackOverflowError происходит, когда плагин вызывает сам себя бесконечно. Классический пример: плагин на событие смерти игрока телепортирует его, что вызывает другое событие, которое снова вызывает тот же обработчик.

В краш-репорте это выглядит так:

java.lang.StackOverflowError
    at com.example.plugin.DeathHandler.onDeath(DeathHandler.java:45)
    at com.example.plugin.DeathHandler.onDeath(DeathHandler.java:45)
    at com.example.plugin.DeathHandler.onDeath(DeathHandler.java:45)
    ... (тысячи одинаковых строк)

Решение

Определите плагин по стек-трейсу и обратитесь к разработчику. Обычно это баг, который исправляется обновлением плагина. Как временное решение, отключите проблемный плагин.

Краши от пакетных эксплойтов и DDoS

Существует отдельная категория крашей, которую невозможно исправить настройками сервера. Это целенаправленные атаки.

Пакетные эксплойты

Злоумышленники отправляют специально сформированные пакеты, которые вызывают ошибки в серверном коде. Примеры:

  • Book exploit: книга с огромным NBT тегом, вызывающая OOM
  • Position exploit: координаты NaN или Infinity, крашащие чанк-систему
  • Packet spam: тысячи пакетов взаимодействия, перегружающие сервер

DDoS атаки

Огромный поток трафика забивает сетевой канал или перегружает сервер поддельными подключениями. Сервер тратит все ресурсы на обработку мусорного трафика и перестаёт отвечать.

Наше решение

Мы в MineGuard специально разработали сетевой фильтр для защиты от этих атак. Наш фильтр работает на сетевом уровне, до того как трафик достигнет вашего сервера. Мы фильтруем пакетные эксплойты, блокируем ботов и поглощаем DDoS трафик. Это те проблемы, которые плагины не могут решить, потому что к моменту, когда плагин получает пакет, ущерб уже нанесён. Наш фильтр перехватывает вредоносные пакеты до того, как они попадут на сервер.

Как правильно просить помощь

Если вы не можете решить проблему самостоятельно, вот что нужно подготовить:

  1. Краш-репорт целиком (файл из crash-reports/)
  2. Последний лог (logs/latest.log)
  3. Spark отчёт: выполните /spark profiler и поделитесь ссылкой
  4. Timings отчёт: выполните /timings on, подождите 5 минут, затем /timings report
  5. Список плагинов с версиями (/plugins)
  6. Версия сервера: Paper/Spigot/Purpur, версия Minecraft, версия Java

С этой информацией вам помогут на форуме SpigotMC, в Discord сервера PaperMC, или в нашем Discord MineGuard. Не выкладывайте просто "сервер крашится, помогите". Чем больше данных вы предоставите, тем быстрее получите решение.

Итого

Большинство крашей Minecraft сервера попадают в одну из этих категорий: нехватка памяти, повреждённые чанки, конфликты плагинов, перегрузка сущностями, или watchdog таймаут. Все они диагностируются через краш-репорты и логи, и все имеют конкретные решения.

Исключение составляют целенаправленные атаки: пакетные эксплойты и DDoS. Для защиты от них нужна сетевая фильтрация, и именно для этого мы создали MineGuard.

Делайте бэкапы, читайте логи, обновляйте плагины, и ваш сервер будет работать стабильно.


Protege tu servidor contra ataques DDoS

Protección gratuita con configuración en 5 minutos. 1 TB de tráfico incluido.

Probar gratis


Artículos relacionados