Добавить в корзинуПозвонить
Найти в Дзене

Как я поднял Minecraft-сервер на 200 игроков и не сошёл с ума

Теги: minecraft, java, linux, gamedev, администрирование --- Полтора года назад ко мне пришёл друг с простой просьбой: «Подними нам сервачок на 20 человек, там делов на час». Сейчас на этом сервере одновременно играют 200 человек, а я знаю о JVM-тюнинге больше, чем хотел бы. Делюсь тем, что реально работает — без воды и без «просто купи выделенку». --- ## Железо: что нужно на самом деле Первый миф — Minecraft требует много ядер CPU. Нет. Vanilla-сервер однопоточный почти полностью. Вам нужны **2–4 быстрых ядра** с высокой тактовой частотой, а не 32 медленных. Мой итоговый стек: - CPU: Ryzen 9 5900X (берём 2 ядра в аренду, частота важнее количества) - RAM: 12 GB под JVM + 4 GB под OS - Диск: **NVMe обязателен** — Minecraft генерирует чанки, и SATA SSD даёт заметные лаги при первом заходе игроков в новые зоны - Сеть: 100 Мбит достаточно для 200 игроков, но пинг до датацентра критичен --- ## Выбор серверного ядра Не используйте официальный сервер Mojang для нагруженных инсталляций. | Ядр

Теги: minecraft, java, linux, gamedev, администрирование

---

Полтора года назад ко мне пришёл друг с простой просьбой: «Подними нам сервачок на 20 человек, там делов на час». Сейчас на этом сервере одновременно играют 200 человек, а я знаю о JVM-тюнинге больше, чем хотел бы.

Делюсь тем, что реально работает — без воды и без «просто купи выделенку».

---

## Железо: что нужно на самом деле

Первый миф — Minecraft требует много ядер CPU. Нет. Vanilla-сервер однопоточный почти полностью. Вам нужны **2–4 быстрых ядра** с высокой тактовой частотой, а не 32 медленных.

Мой итоговый стек:

- CPU: Ryzen 9 5900X (берём 2 ядра в аренду, частота важнее количества)

- RAM: 12 GB под JVM + 4 GB под OS

- Диск: **NVMe обязателен** — Minecraft генерирует чанки, и SATA SSD даёт заметные лаги при первом заходе игроков в новые зоны

- Сеть: 100 Мбит достаточно для 200 игроков, но пинг до датацентра критичен

---

## Выбор серверного ядра

Не используйте официальный сервер Mojang для нагруженных инсталляций.

| Ядро | Плюсы | Минусы |

|------|-------|--------|

| **Paper** | Лучший баланс производительности и совместимости | — |

| **Purpur** | Максимум конфигов, форк Paper | Больше нюансов при обновлении |

| **Folia** | Многопоточность чанков | Несовместим с большинством плагинов |

| Spigot | Устарел | Нет смысла в 2024 |

| Vanilla | Только для технических серверов | Нет оптимизаций |

Мой выбор — **Paper**. Стабилен, хорошая документация, 99% плагинов работают из коробки.

---

## Настройка JVM — это половина успеха

Запуск сервера командой `java -jar server.jar` — это преступление против производительности.

Минимальный набор флагов для Paper (Aikar's Flags):

```bash

java -Xms10G -Xmx10G \

-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 paper.jar --nogui

```

Главное правило: `-Xms` и `-Xmx` должны быть **одинаковыми**. Это отключает динамическое выделение кучи и снижает GC-паузы.

---

## paper.yml и bukkit.yml: ключевые параметры

Большинство туториалов советуют просто «скачать оптимизированный конфиг». Я советую понять, что именно вы меняете.

**`paper-world-defaults.yml`** (самые важные):

```yaml

chunks:

max-auto-save-chunks-per-tick: 8 # снижаем с 24, уменьшает I/O пики

entities:

spawning:

duplicate-uuid: SAFE_REGEN

tick-rates:

grass-spread: 4 # вместо 1, незаметно для игроков

container-update: 1 # оставляем как есть

environment:

max-chunk-generate-limit: 10 # ограничиваем генерацию чанков в тик

```

**`bukkit.yml`**:

```yaml

spawn-limits:

monsters: 50 # default 70, снижаем

animals: 10 # default 15

water-animals: 3 # default 5

chunk-gc:

period-in-ticks: 600 # выгрузка чанков каждые 30 секунд

```

---

## Мониторинг: что смотреть

Установите плагин **Spark** — это профайлер для Minecraft-серверов. Он покажет:

- TPS (Ticks Per Second) — должен быть 20.0

- Какие плагины и сущности жрут CPU

- Memory allocation rate

```bash

# В консоли сервера:

/spark tps # текущий TPS

/spark profiler # запустить профилировщик на 60 секунд

/spark heapsummary # анализ памяти

```

Если TPS падает ниже 18 — проблема. Ниже 15 — игроки уже чувствуют лаги.

---

## Типичные проблемы и их решение

**Лаги при загрузке чанков**

Решение: предгенерация через плагин Chunky перед открытием сервера.

```

/chunky radius 5000

/chunky start

```

**Memory leak через 12–24 часа**

Чаще всего виноват плагин. Смотрим через Spark, отключаем по одному. В 80% случаев виноват какой-нибудь плагин экономики или claims.

**Сервер не стартует после обновления ядра**

Всегда делайте бэкап `plugins/` перед обновлением. Paper иногда ломает API между минорными версиями.

---

## Итог

Сервер на 200 человек — это не только техническая задача, но и организационная. Хороший тимспик с модераторами важен не меньше JVM-флагов.

Но если говорить о железе и настройках: Paper + Aikar's Flags + NVMe + мониторинг через Spark закрывают 90% проблем производительности.

Если интересна тема масштабирования через BungeeCord/Velocity — напишите в комментариях, разберу отдельно.