Добро пожаловать на Craft‑Bukkit

Всё о Minecraft серверах: гайды, команды, скачивание сборок и полезные советы для администраторов и игроков.

Ошибка «Thread starvation» и «Watchdog»: когда сервер зависает намертво

wergio 24.07.2026 11:53 3
Ошибка Thread starvation: почему сервер Minecraft зависает и как настроить Watchdog.

Введение: сервер в коме

Ошибка «Thread starvation» или сообщение от Watchdog «The server has not responded for X seconds» означает, что главный поток сервера заблокирован и не может обрабатывать тики. Сервер не крашится, но полностью зависает: игроки не могут двигаться, консоль не отвечает на команды. Это состояние может длиться минутами. В этом гайде — что вызывает thread starvation и как настроить Watchdog для автоматического восстановления.

Как работает Watchdog

Watchdog (сторожевой пёс) — это механизм в Paper/Purpur, который мониторит главный поток сервера. Если поток не отвечает более 60 секунд (по умолчанию), Watchdog выводит дамп потоков (thread dump) в консоль, чтобы вы могли увидеть, какой именно код заблокировал сервер.

Причина 1: Операция записи на диск (I/O)

Сохранение мира, запись логов, бэкап — всё это операции ввода-вывода. Если диск медленный или перегружен, операция записи может заблокировать главный поток на несколько секунд или даже минут.

Решение:

  • В paper.yml включите асинхронное сохранение: async-chunks: true.
  • Используйте SSD/NVMe-диск.
  • Не запускайте бэкапы и антивирусное сканирование во время работы сервера.

Причина 2: Плагин выполняет тяжёлую операцию в главном потоке

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

Решение:

  • Используйте Spark для профилирования потоков: /spark profiler start --thread *.
  • Найдите плагин, который заблокировал поток (в дампе Watchdog будет указан стектрейс).
  • Обновите плагин или сообщите разработчику о проблеме.

Причина 3: Сборщик мусора (GC) остановил мир

Если используется неправильный GC или памяти недостаточно, сборщик мусора может выполнять «stop-the-world» паузы на 10-30 секунд.

Решение:

  • Используйте флаги Aikar (см. гайд «Java Heap Space»).
  • Используйте G1GC с ограничением пауз: -XX:MaxGCPauseMillis=200.

Настройка Watchdog

В paper.yml:

watchdog:
  early-warning-every: 5000  # предупреждение каждые 5 секунд
  early-warning-delay: 10000  # первое предупреждение через 10 секунд
  early-warning-length: 30000  # через 30 секунд — принудительный дамп
  timeout: 60  # таймаут в секундах

Уменьшите timeout до 30 секунд, чтобы быстрее получать дамп и диагностировать проблему.

💡 Совет профи

Настройте автоматический перезапуск сервера при thread starvation. Система мониторинга (скрипт или плагин) проверяет TPS сервера каждые 10 секунд. Если TPS = 0 в течение 60 секунд — сервер автоматически перезапускается. Это не решит причину, но вернёт игроков в игру быстрее, чем ручной перезапуск администратором.
← К списку статей

💬 Комментарии (0)

⏳ Все комментарии проходят модерацию

🔒 Войдите, чтобы оставить комментарий

😊 Пока нет комментариев. Будьте первым!