Minecraft сервер лагает: DDoS или проблемы сервера?

Minecraft сервер лагает: DDoS или проблемы сервера?

Лаги - это ещё не DDoS

Каждый раз, когда сервер начинает тормозить, первая мысль - "нас ддосят". В 80% случаев это не так. Чаще всего причина банальная: криво настроенный плагин, нехватка RAM, или мир, который весит 15 ГБ и грузит чанки со скоростью дискеты.

Проблема в том, что симптомы DDoS и серверных лагов бывают очень похожи. Игроки видят одно и то же - "сервер лагает". Но причины разные, и лечить их нужно по-разному.

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

Шаг 1: Проверь TPS

TPS (Ticks Per Second) - это пульс сервера. Нормальное значение - 20. Если ниже - сервер не справляется с обработкой игровой логики.

В консоли Minecraft:

/tps

Или если стоит Spark:

/spark tps

Что означают цифры:

  • 20.0 - всё идеально, проблема не в игровой логике
  • 15-19 - небольшие просадки, терпимо
  • 10-15 - заметные лаги, что-то жрёт ресурсы
  • Ниже 10 - сервер захлёбывается

Вот что важно. Если TPS низкий (ниже 15), скорее всего проблема в самом сервере, не в атаке. DDoS-атаки обычно не роняют TPS, потому что атака идёт на сетевом уровне. Сервер может иметь идеальные 20 TPS, но игроки всё равно не могут подключиться, потому что канал забит.

Если TPS 20, но лаги есть - это подозрительно. Скорее всего проблема сетевая: либо DDoS, либо проблемы у хостера с сетью.

Шаг 2: Смотрим CPU и RAM

Зайди на сервер по SSH и проверь нагрузку:

htop

Или если htop не установлен:

top -c

На что смотреть:

  • CPU 80-100% на процессе Java - сервер перегружен, TPS скорее всего тоже низкий. Это серверная проблема.
  • RAM используется на 90%+ - если Java упирается в лимит памяти, начинается GC (garbage collection), и сервер фризит на секунды. Это одна из самых частых причин "лагов".
  • CPU в норме, RAM в норме, но лаги есть - значит проблема не в вычислительных ресурсах. Копаем дальше.

Типичный вывод htop при нормальной нагрузке:

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 1234 minecraft 20   0   8.2g   4.1g  12340 S  45.0 52.0   5:23.41 java -Xmx6G -jar paper.jar

45% CPU, 52% RAM - всё нормально, ресурсы есть. Если при этом лагает, ищи причину в другом месте.

Шаг 3: Проверяем сеть

Вот тут начинается самое интересное. Сетевые проблемы бывают двух видов: "нас ддосят" и "у хостера что-то сломалось".

Количество соединений:

netstat -an | grep :25565 | wc -l

Или если у тебя несколько портов:

ss -s

Нормальные цифры: если на сервере 50 игроков, должно быть примерно 50-70 соединений на порт сервера. Ну может 100, если кто-то переподключается.

Подозрительные цифры: 500+ соединений при 30 игроках онлайн - что-то не так. 2000+ - почти наверняка атака.

Проверяем трафик в реальном времени:

iftop -i eth0

Если iftop не установлен:

apt install iftop

Нормальный Minecraft сервер с 50 игроками потребляет 5-15 Мбит/с. Если видишь 100+ Мбит/с, а игроков 20, это ненормально.

Быстрая проверка входящего трафика:

cat /proc/net/dev | grep eth0

Запусти два раза с интервалом в 10 секунд и посчитай разницу в байтах. Или используй vnstat если он стоит:

vnstat -l -i eth0

Шаг 4: Определяем тип проблемы

Теперь у тебя есть данные. Давай поставим диагноз.

Это серверная проблема, если:

  • TPS ниже 15
  • CPU загружен на 80%+
  • В логах ошибки плагинов или "Can't keep up!"
  • Лаги пропадают, когда игроков мало (ночью, например)
  • Лаги начались после обновления плагина/мира
  • netstat показывает нормальное количество соединений
  • Трафик в пределах нормы

Это DDoS, если:

  • TPS нормальный (18-20), но игроки не могут зайти
  • Сотни или тысячи соединений в netstat
  • Трафик 100+ Мбит/с при малом количестве игроков
  • Хостер прислал уведомление об аномальном трафике
  • Не можешь подключиться по SSH (канал забит)
  • В логах сотни "Player connected" и "Player disconnected" за секунды
  • Проблема появилась резко, без каких-либо изменений на сервере

Это проблема сети хостера, если:

  • TPS нормальный
  • CPU и RAM в норме
  • Трафик в норме
  • Соединений нормальное количество
  • Но у игроков пинг 200+ или потеря пакетов
  • Проблема у всех игроков одновременно

Серверные проблемы, которые маскируются под DDoS

Есть несколько типичных ситуаций, когда кажется что "ддосят", а на самом деле виноват сервер.

Garbage Collection спайки

Когда Java решает почистить память, сервер может зависнуть на 1-5 секунд. Для игроков это выглядит как резкий фриз, потом всё нормально, потом опять фриз.

Добавь в параметры запуска:

-XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200

И проверь, что Xmx не больше 10-12 ГБ. Чем больше RAM выделено, тем дольше GC пауза.

Если используешь Spark, посмотри GC статистику:

/spark gc

Тяжёлые плагины

Один криво написанный плагин может положить весь сервер. Классика - плагин, который каждый тик делает SQL запрос или сканирует все сущности.

Профилирование через Spark:

/spark profiler start

Подожди 2-3 минуты, потом:

/spark profiler stop

Spark покажет, какой плагин жрёт больше всего тиков. Если какой-то плагин занимает 40%+ - вот твоя проблема.

Загрузка чанков

Когда много игроков разбегаются по миру, серверу приходится генерировать и подгружать чанки. На HDD это медленно, на SSD - терпимо, но всё равно может вызывать просадки.

Решение - прегенерация мира:

/chunky radius 5000
/chunky start

И обязательно проверь, что сервер стоит на SSD. В 2026 году запускать Minecraft на HDD - это мазохизм.

MySQL лаги

Если плагины используют MySQL и база на том же сервере, при больших запросах может лагать весь сервер. Проверяем:

mysqladmin -u root -p processlist

Если видишь запросы, которые висят по 10-30 секунд, проблема в базе. Оптимизируй запросы, добавь индексы, или вынеси базу на отдельный сервер.

Повреждённый мир

Иногда конкретный регион мира повреждён. Когда игрок заходит в этот чанк, сервер начинает тупить. Симптомы - лаги появляются только когда определённый игрок в определённом месте.

Проверь логи на ошибки загрузки чанков и попробуй удалить проблемный регион файл из world/region/.

Инструменты для диагностики

Вот набор тулзов, которые должны быть на каждом Minecraft сервере:

Внутри Minecraft:

  • Spark - must have плагин. Профилирование, TPS, GC, memory. Ставь его первым делом.
  • Timings (встроен в Paper) - /timings on, потом /timings report. Покажет что тормозит.

На сервере (Linux):

  • htop - смотрим CPU и RAM. apt install htop
  • iftop - трафик в реальном времени. apt install iftop
  • vnstat - статистика трафика за время. apt install vnstat
  • ss / netstat - сетевые соединения
  • iostat - нагрузка на диск. apt install sysstat

Для глубокой диагностики сети:

tcpdump -i eth0 port 25565 -c 100 -nn

Это покажет первые 100 пакетов на порт сервера. Если видишь кучу SYN пакетов с разных IP без ACK - это SYN flood.

netstat -an | grep :25565 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20

Эта команда покажет топ-20 IP адресов по количеству подключений. Если один IP имеет 200+ соединений, это или бот, или кто-то ломится.

Пошаговый алгоритм диагностики

Когда сервер залагал, действуй по порядку:

1. Проверь TPS - /tps или /spark tps

  • Низкий? Иди к шагу 2А
  • Нормальный (18+)? Иди к шагу 2Б

2А. TPS низкий - серверная проблема:

  • Проверь CPU/RAM через htop
  • Запусти /spark profiler на 2-3 минуты
  • Посмотри что жрёт ресурсы
  • Проверь логи на ошибки

2Б. TPS нормальный - сетевая проблема:

  • Проверь количество соединений: netstat -an | grep :25565 | wc -l
  • Проверь трафик: iftop -i eth0
  • Много соединений (500+)? Скорее всего DDoS.
  • Трафик зашкаливает? Скорее всего DDoS.
  • Всё в норме? Проблема у хостера, пиши в саппорт.

3. Подтверждаем DDoS:

  • Смотрим топ IP: netstat -an | grep :25565 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20
  • Проверяем логи Minecraft на массовые подключения
  • Смотрим уведомления от хостера

Что делать, когда определил проблему

Если это серверные лаги:

  1. Обнови ядро. Paper, Purpur, Folia - в каждом обновлении фиксят производительность.
  2. Оптимизируй server.properties и config. view-distance: 6-8 вместо 10, simulation-distance: 4-6.
  3. Вычисли проблемный плагин. Spark профилирование - твой лучший друг.
  4. Прегенерируй мир. Chunky решает проблему загрузки чанков.
  5. Добавь RAM, но не больше 10-12 ГБ. Больше - дольше GC паузы.
  6. Перейди на SSD, если ещё на HDD.

Если это DDoS:

Тут всё серьёзнее. iptables правила помогут от мелких атак, но от серьёзного ддоса на 10+ Гбит/с - нет.

  1. Включи whitelist как временную меру.
  2. Не меняй порт - это бесполезно.
  3. Если у хостера есть базовая защита - включи. Иногда помогает.
  4. Для постоянной защиты нужен reverse proxy, который фильтрует Minecraft трафик. Сервисы вроде MineGuard анализируют протокол Minecraft и отсеивают ботов на уровне приложения, а не просто по IP.
  5. Скрой реальный IP после настройки защиты. Если атакующий знает настоящий IP, он обойдёт любой прокси.

Если проблема у хостера:

  1. Пиши в саппорт с конкретными данными: "TPS 20, CPU 30%, но у игроков пинг 300мс и потери пакетов 20%".
  2. Попроси проверить сеть и маршрутизацию.
  3. Если хостер не решает проблему, меняй хостера. Серьёзно.

Реальный пример из логов

Вот так выглядит лог сервера во время бот-атаки:

[12:34:56] [Server thread/INFO]: Player392 (/185.23.xx.xx:54321) logged in
[12:34:56] [Server thread/INFO]: Player392 left the game
[12:34:56] [Server thread/INFO]: Player847 (/91.108.xx.xx:12345) logged in
[12:34:56] [Server thread/INFO]: Player847 left the game
[12:34:57] [Server thread/INFO]: Player103 (/45.67.xx.xx:33210) logged in
[12:34:57] [Server thread/INFO]: Player103 left the game
[12:34:57] [Server thread/INFO]: Player556 (/103.28.xx.xx:44123) logged in
[12:34:57] [Server thread/INFO]: Player556 left the game

Десятки подключений в секунду, разные IP, зашли-вышли мгновенно. Это L7 бот-атака.

А вот так выглядит серверный лаг:

[12:34:56] [Server thread/WARN]: Can't keep up! Is the server overloaded? Running 4523ms or 70 ticks behind
[12:34:58] [Server thread/WARN]: Can't keep up! Is the server overloaded? Running 6102ms or 102 ticks behind

"Can't keep up" - это всегда серверная проблема, не DDoS. Сервер не успевает обрабатывать тики.

И вот GC пауза:

[12:35:01] [GC Thread] GC pause (G1 Evacuation Pause) 6144M->3072M(8192M) 847.23ms

847 миллисекунд фриз из-за сборки мусора. Если такие паузы частые, уменьши Xmx или оптимизируй параметры GC.

Итого

Не каждый лаг - это DDoS. Прежде чем паниковать, потрать 5 минут на диагностику. Проверь TPS, CPU, RAM, сеть. В большинстве случаев причина окажется банальной - тяжёлый плагин, нехватка ресурсов, или повреждённый мир.

Если же это действительно атака, то iptables костыли не спасут от чего-то серьёзного. Нужна нормальная защита с фильтрацией на уровне протокола, как у MineGuard, или свой настроенный прокси, если хватает экспертизы. Главное - не забудь скрыть реальный IP, иначе всё остальное бесполезно.


Proteja Seu Servidor de Ataques DDoS

Proteção gratuita com configuração em 5 minutos. 1 TB de tráfego incluso.

Experimentar Grátis


Artigos Relacionados