Оптимизация производительности Minecraft сервера

Материал из ARK-HOSTER.RU | Документация хостинга
Перейти к: навигация, поиск

Оптимизация производительности Minecraft сервера

1. Подготовка системы

  • Войдите в систему под учетной записью с правами root или пользователя с правами sudo.
  • Убедитесь, что у вас есть доступ к серверу через SSH или консоль.
  • Рекомендуется использовать Ubuntu 24.04 LTS для стабильной работы.

2. Оптимизация JVM параметров

Настройка памяти

1. Отредактируйте systemd сервис:

sudo nano /etc/systemd/system/minecraft-spigot.service

2. Оптимизируйте JVM параметры:

ExecStart=/usr/bin/java -Xms4G -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 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar spigot-1.20.1.jar nogui

Настройка G1GC

1. Создайте оптимизированный скрипт запуска:

nano /opt/minecraft/spigot/start-optimized.sh

2. Добавьте содержимое:

\#!/bin/bash

\# Оптимизированные JVM параметры
JAVA_OPTS="-Xms4G -Xmx8G"
JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC"
JAVA_OPTS="$JAVA_OPTS -XX:+ParallelRefProcEnabled"
JAVA_OPTS="$JAVA_OPTS -XX:MaxGCPauseMillis=200"
JAVA_OPTS="$JAVA_OPTS -XX:+UnlockExperimentalVMOptions"
JAVA_OPTS="$JAVA_OPTS -XX:+DisableExplicitGC"
JAVA_OPTS="$JAVA_OPTS -XX:+AlwaysPreTouch"
JAVA_OPTS="$JAVA_OPTS -XX:G1NewSizePercent=30"
JAVA_OPTS="$JAVA_OPTS -XX:G1MaxNewSizePercent=40"
JAVA_OPTS="$JAVA_OPTS -XX:G1HeapRegionSize=8M"
JAVA_OPTS="$JAVA_OPTS -XX:G1ReservePercent=20"
JAVA_OPTS="$JAVA_OPTS -XX:G1HeapWastePercent=5"
JAVA_OPTS="$JAVA_OPTS -XX:G1MixedGCCountTarget=4"
JAVA_OPTS="$JAVA_OPTS -XX:InitiatingHeapOccupancyPercent=15"
JAVA_OPTS="$JAVA_OPTS -XX:G1MixedGCLiveThresholdPercent=90"
JAVA_OPTS="$JAVA_OPTS -XX:G1RSetUpdatingPauseTimePercent=5"
JAVA_OPTS="$JAVA_OPTS -XX:SurvivorRatio=32"
JAVA_OPTS="$JAVA_OPTS -XX:+PerfDisableSharedMem"
JAVA_OPTS="$JAVA_OPTS -XX:MaxTenuringThreshold=1"
JAVA_OPTS="$JAVA_OPTS -Dusing.aikars.flags=https://mcflags.emc.gs"
JAVA_OPTS="$JAVA_OPTS -Daikars.new.flags=true"

\# Запуск сервера
java $JAVA_OPTS -jar spigot-1.20.1.jar nogui

3. Сделайте скрипт исполняемым:

chmod +x start-optimized.sh

3. Оптимизация Paper конфигурации

Настройка paper-global.yml

1. Отредактируйте конфигурацию:

nano /opt/minecraft/paper/paper-global.yml

2. Оптимизируйте настройки:

\# Paper Global Configuration
_version: 25
misc:
  compression-level: -1
  max-joins-per-tick: 5
  region-file-cache-size: 256
  use-alternative-luck-formula: false
  lag-compensate-block-breaking: true
  use-dimension-type-for-custom-spawners: false
  strict-advancement-dimension-check: false
  fix-climbing-bypassing-cramming-rule: false

\# Оптимизация тиков
tick-rates:
  grass-spread: 4
  container-update: 1
  mob-spawner: 1

\# Оптимизация мобов
mob-spawner:
  tick-rate: 1
  spawn-counts:
    monster: 70
    creature: 15
    ambient: 15
    water_creature: 5
    water_ambient: 20
    misc: -1

Настройка paper-world-defaults.yml

1. Отредактируйте конфигурацию мира:

nano /opt/minecraft/paper/paper-world-defaults.yml

2. Оптимизируйте настройки:

\# Paper World Defaults Configuration
\# Оптимизация чанков
chunk-loading:
  autoconfig-send-distance: true
  enable-frustum-priority: false
  global-max-chunk-load-rate: -1
  global-max-concurrent-send: 2
  max-concurrent-sends: 2
  min-load-radius: 2
  player-max-chunk-load-rate: 100
  target-player-chunk-send-rate: 100

\# Оптимизация мобов
entities:
  spawning:
    all-chunks-are-slime-chunks: false
    count-all-mobs-for-spawning: false
    creative-arrow-despawn-rate: -1
    despawn-ranges:
      ambient: -1
      axolotls: -1
      creature: -1
      misc: -1
      monster: -1
      underground_water_creature: -1
      water_ambient: -1
      water_creature: -1
    fix-clumping: true
    per-player-mob-spawns: true
    spawner-nerfed-mobs-should-jump: true

4. Оптимизация Spigot конфигурации

Настройка spigot.yml

1. Отредактируйте конфигурацию:

nano /opt/minecraft/spigot/spigot.yml

2. Оптимизируйте настройки:

\# Spigot Configuration
settings:
  debug: false
  bungeecord: false
  restart-on-crash: true
  restart-script: ./start.sh
  netty-threads: 4
  timeout-time: 60
  restart-on-crash: true
  restart-script: ./start.sh
  user-cache-size: 1000
  save-user-cache-on-stop-only: false
  moved-wrongly-threshold: 0.0625
  moved-too-quickly-multiplier: 10.0
  moved-too-quickly-threshold: 0.3
  log-villager-deaths: true
  log-named-deaths: true

\# Оптимизация тиков
world-settings:
  default:
    chunks-per-tick: 650
    max-entity-collisions: 8
    max-tick-time:
      tile: 50
      entity: 50
    merge-radius:
      item: 2.5
      exp: 3.0
    item-despawn-rate: 6000
    arrow-despawn-rate: 1200
    trident-despawn-rate: 1200
    zombie-aggressive-towards-villager-when-lagging: true
    nerf-spawner-mobs: false
    enable-zombie-pigmen-portal-spawns: true
    custom-map-seeds: false
    seed-village: 10387312
    seed-desert: 14357617
    seed-igloo: 14357618
    seed-jungle: 14357619
    seed-swamp: 14357620
    seed-monument: 10387313
    seed-shipwreck: 165745295
    seed-ocean: 14357621
    seed-endcity: 10387313
    seed-slime: 987234911
    seed-bastion: 30084232
    seed-fortress: 30084232
    seed-mansion: 10387319
    seed-fossil: 14357921
    seed-buried-treasure: 10387320
    seed-mineshaft: 10387321
    seed-ruined-portal: 34222645
    seed-geode: 14357622

5. Оптимизация системы

Настройка ядра системы

1. Отредактируйте sysctl.conf:

sudo nano /etc/sysctl.conf

2. Добавьте оптимизации:

\# Оптимизация для Minecraft сервера
\# Увеличение буферов сети
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 65536 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

\# Оптимизация TCP
net.ipv4.tcp_congestion_control = bbr
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_tw_reuse = 1

\# Оптимизация памяти
vm.swappiness = 10
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5

3. Примените изменения:

sudo sysctl -p

Настройка лимитов системы

1. Отредактируйте limits.conf:

sudo nano /etc/security/limits.conf

2. Добавьте лимиты:

\# Лимиты для пользователя minecraft
minecraft soft nofile 65536
minecraft hard nofile 65536
minecraft soft nproc 32768
minecraft hard nproc 32768

6. Оптимизация диска

Настройка SSD

1. Проверьте тип диска:

lsblk -d -o name,rota

2. Если SSD, настройте TRIM:

sudo systemctl enable fstrim.timer
sudo systemctl start fstrim.timer

Настройка файловой системы

1. Проверьте файловую систему:

df -T

2. Если ext4, настройте оптимизации:

sudo tune2fs -o journal_data_writeback /dev/sda1
sudo tune2fs -O ^has_journal /dev/sda1

7. Мониторинг производительности

Установка инструментов мониторинга

1. Установите необходимые пакеты:

sudo apt install -y htop iotop nethogs

2. Установите jstat для мониторинга JVM:

sudo apt install -y openjdk-21-jdk

Создание скрипта мониторинга

1. Создайте скрипт мониторинга:

sudo nano /usr/local/bin/minecraft-performance-monitor.sh

2. Добавьте содержимое:

\#!/bin/bash

\# Мониторинг производительности Minecraft сервера
LOG_FILE="/var/log/minecraft-performance.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')

\# Проверка использования CPU
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | awk -F'%' '{print $1}')
echo "[$DATE] CPU Usage: $CPU_USAGE%" >> $LOG_FILE

\# Проверка использования памяти
MEMORY_USAGE=$(free | grep Mem | awk '{printf("%.2f", $3/$2 * 100.0)}')
echo "[$DATE] Memory Usage: $MEMORY_USAGE%" >> $LOG_FILE

\# Проверка использования диска
DISK_USAGE=$(df /opt/minecraft | tail -1 | awk '{print $5}' | sed 's/%//')
echo "[$DATE] Disk Usage: $DISK_USAGE%" >> $LOG_FILE

\# Проверка JVM статистики
if pgrep -f "spigot\|paper" > /dev/null; then
    PID=$(pgrep -f "spigot\|paper" | head -1)
    GC_TIME=$(jstat -gc $PID | tail -1 | awk '{print $3+$5}')
    echo "[$DATE] GC Time: $GC_TIME ms" >> $LOG_FILE
fi

\# Проверка сетевого трафика
NETWORK_USAGE=$(cat /proc/net/dev | grep eth0 | awk '{print $2+$10}')
echo "[$DATE] Network Usage: $NETWORK_USAGE bytes" >> $LOG_FILE

3. Сделайте скрипт исполняемым:

sudo chmod +x /usr/local/bin/minecraft-performance-monitor.sh

4. Добавьте в crontab:

sudo crontab -e

5. Добавьте задачу:

*/1 * * * * /usr/local/bin/minecraft-performance-monitor.sh

8. Оптимизация сети

Настройка TCP параметров

1. Создайте файл настроек сети:

sudo nano /etc/sysctl.d/99-minecraft.conf

2. Добавьте настройки:

\# Оптимизация сети для Minecraft
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 65536 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_congestion_control = bbr
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3

3. Примените изменения:

sudo sysctl -p /etc/sysctl.d/99-minecraft.conf

Настройка файрвола

1. Оптимизируйте iptables:

sudo iptables -A INPUT -p tcp --dport 25565 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

2. Сохраните правила:

sudo iptables-save > /etc/iptables/rules.v4

9. Оптимизация плагинов

Настройка EssentialsX

1. Отредактируйте конфигурацию:

nano /opt/minecraft/spigot/plugins/Essentials/config.yml

2. Оптимизируйте настройки:

\# Оптимизация EssentialsX
chat:
  format: '&7[&6{GROUP}&7] &f{DISPLAYNAME}&7: &f{MESSAGE}'
  radius: 0
  local-format: '&7[&6{GROUP}&7] &f{DISPLAYNAME}&7: &f{MESSAGE}'

\# Оптимизация телепортации
teleport:
  delay: 0
  cooldown: 0
  invulnerability: 0

\# Оптимизация экономики
economy:
  currency-symbol: '$'
  starting-balance: 0.0
  max-money: 1000000.0
  min-pay-amount: 0.0

Настройка WorldEdit

1. Отредактируйте конфигурацию:

nano /opt/minecraft/spigot/plugins/WorldEdit/config.yml

2. Оптимизируйте настройки:

\# Оптимизация WorldEdit
max-blocks-per-chunk: 65536
max-blocks-per-chunk-analyze: 65536
max-blocks-per-chunk-ops: 65536

\# Оптимизация истории
history:
  size: 15
  use-disk: true
  use-database: false

\# Оптимизация экономики
economy:
  cost: 0.0
  use-cost: false

10. Устранение неполадок

Частые проблемы

1. Высокое использование CPU:

  • Оптимизируйте JVM параметры
  • Проверьте настройки тиков
  • Уменьшите количество мобов

2. Высокое использование памяти:

  • Увеличьте выделенную память
  • Оптимизируйте G1GC настройки
  • Проверьте утечки памяти

3. Проблемы с сетью:

  • Оптимизируйте TCP параметры
  • Проверьте настройки файрвола
  • Увеличьте буферы сети

Диагностика

1. Проверка производительности:

htop
iotop
nethogs

2. Проверка JVM статистики:

jstat -gc <PID>
jstat -gccapacity <PID>

3. Проверка сетевых соединений:

netstat -tlnp | grep :25565
ss -tlnp | grep :25565

Заключение

Minecraft сервер успешно оптимизирован! Теперь у вас есть высокопроизводительный сервер с оптимизированными JVM параметрами, системными настройками и мониторингом.

Для размещения ваших оптимизированных Minecraft серверов на надежном хостинге рекомендуем воспользоваться услугами [ARK-HOSTER.RU](https://ark-hoster.ru):

Наши специалисты помогут с оптимизацией производительности ваших Minecraft серверов!