Как уменьшить лаги сервера Minecraft

1. Подготовка и диагностика через панель proxify.cloud

  1. Войдите в панель proxify.cloud и выберите ваш выделенный сервер.
  2. Откройте вкладку Console (консоль Proxmox) или подключитесь по SSH:
    ssh root@<IP_ВАШЕГО_СЕРВЕРА>
    
  3. Проверьте текущую нагрузку перед изменениями:
    htop
    # или
    top -bn1 | head -20
    
  4. Определите PID процесса Java (Minecraft):
    pgrep -fl java
    # Пример вывода: 1234 java -Xms4G -Xmx4G -jar paper.jar
    
  5. Запишите PID для дальнейшего анализа (например, 1234).

2. Оптимизация JVM-флагов (файл запуска)

  1. Перейдите в директорию сервера (стандартный путь на proxify.cloud):
    cd /opt/minecraft/server
    # или
    cd /home/minecraft/server
    
  2. Откройте скрипт запуска (обычно start.sh или run.sh):
    nano start.sh
    
  3. Замените строку запуска на оптимизированную для Paper/Spigot/Purpur (Java 17/21):
    #!/bin/bash
    java -Xms4G -Xmx4G \
    -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 \
    -Dusing.aikars.flags=https://mcflags.emc.gs \
    -Daikars.new.flags=true \
    -jar paper.jar --nogui
    
    • -Xms4G -Xmx4G: задайте равные значения (75-80% от RAM сервера). На выделенном сервере proxify.cloud с 32 ГБ RAM ставьте -Xms24G -Xmx24G.
    • --nogui: отключает графический интерфейс, экономит ресурсы.
  4. Сделайте скрипт исполняемым и перезапустите:
    chmod +x start.sh
    ./start.sh
    

3. Настройка paper-global.yml (Paper/Purpur)

  1. Остановите сервер (stop в консоли).
  2. Откройте конфиг:
    nano /opt/minecraft/server/paper-global.yml
    
  3. Примените следующие критичные параметры (раскомментируйте или добавьте):
    # Уменьшаем обработку сущностей в неактивных чанках
    entity-per-chunk-save-limit:
      experience_orb: 10
      item: 20
      arrow: 20
    
    # Оптимизация поиска путей мобов
    max-entity-collisions: 2
    fix-items-merging-through-walls: true
    
    # Отключаем лишние проверки
    disable-chest-cat-detection: true
    disable-end-credits: true
    disable-player-crits: false # true для PvP серверов
    
    # Хранение данных
    use-faster-eigencraft-redstone: true
    armor-stands-tick: false
    armor-stands-do-collision-entity-lookups: false
    
    # Чанки
    delay-chunk-unloads-by: 10s
    prevent-moving-into-unloaded-chunks: true
    
  4. Сохраните (Ctrl+O, Enter) и выйдите (Ctrl+X).

4. Настройка spigot.yml (Spigot/Paper/Purpur)

  1. Откройте файл:
    nano /opt/minecraft/server/spigot.yml
    
  2. Измените секцию settings:
    settings:
      save-user-cache-on-stop-only: true
      entity-tracking-range:
        players: 48
        animals: 48
        monsters: 48
        misc: 32
        other: 64
      # Уменьшаем частоту тиков для далекого контента
      tick-inactive:
        animals: true
        monsters: true
        villagers: true
      nerf-spawner-mobs: true
      mob-spawn-range: 4
    
  3. В секции commands отключите табы для тяжелых команд (опционально):
    commands:
      tab-complete: 0
    

5. Настройка bukkit.yml

  1. Откройте:
    nano /opt/minecraft/server/bukkit.yml
    
  2. Оптимизируйте спавн и лимиты:
    spawn-limits:
      monsters: 50      # было 70
      animals: 8        # было 10
      water-animals: 3  # было 5
      water-ambient: 1  # было 20
      axolotls: 3
      ambient: 1
    chunk-gc:
      period-in-ticks: 400
    ticks-per:
      animal-spawns: 400
      monster-spawns: 1
      water-spawns: 400
      water-ambient-spawns: 400
      axolotl-spawns: 400
      ambient-spawns: 400
    

6. Настройка server.properties

  1. Откройте:
    nano /opt/minecraft/server/server.properties
    
  2. Ключевые параметры:
    view-distance=6           # 4-6 для выживания, 8+ только для мини-игр
    simulation-distance=5     # Должно быть <= view-distance
    max-tick-time=60000       # Предотвращает краш при лаге (watchdog)
    max-chained-neighbor-updates=1000000 # Фикс редукт-лагов
    network-compression-threshold=256
    use-native-transport=true # Важно для Linux (epoll)
    sync-chunk-writes=true
    region-file-compression=deflate
    
  3. Если сервер Paper/Purpur, добавьте в конец файла (Paper игнорирует неизвестные, но читает свои):
    paper.use-faster-eigencraft-redstone=true
    paper.armor-stands-tick=false
    

7. Установка и настройка плагинов для производительности

Выполните в консоли сервера (или через SFTP в папку plugins):

  1. Spark (профилировщик):

    cd /opt/minecraft/server/plugins
    wget https://ci.lucko.me/job/spark/lastSuccessfulBuild/artifact/spark-bukkit/target/spark-*-bukkit.jar -O spark.jar
    

    Использование: /spark profiler --timeout 30 в игре или консоли.

  2. EntityTrackerFixer (фикс трекинга сущностей):

    wget https://github.com/Techcable/EntityTrackerFixer/releases/latest/download/EntityTrackerFixer.jar
    
  3. FarmLimiter / StackMob (лимиты ферм/стакинг мобов) — выберите один:

    # FarmLimiter (конфиг в plugins/FarmLimiter/config.yml)
    wget https://ci.codemc.io/job/Redempt/job/FarmLimiter/lastSuccessfulBuild/artifact/build/libs/FarmLimiter-*.jar -O FarmLimiter.jar
    
  4. ClearLagg (очистка предметов/сущностей) — настройте мягко:

    wget https://github.com/CreativeMD/ClearLag/releases/latest/download/ClearLag.jar
    

    Конфиг plugins/ClearLag/config.yml:

    auto-clear:
      enabled: true
      interval: 300 # 5 минут
      clear-entities: true
      clear-items: true
      clear-arrows: true
    

8. Настройка ОС Ubuntu (хост-машина proxify.cloud)

Выполните в консоли Proxmox (Shell узла) или по SSH к Ubuntu:

  1. Отключите swap (если RAM хватает) или настройте vm.swappiness:

    echo 'vm.swappiness=1' >> /etc/sysctl.conf
    echo 'vm.vfs_cache_pressure=50' >> /etc/sysctl.conf
    sysctl -p
    
  2. Настройте CPU Governor на Performance:

    apt update && apt install -y cpufrequtils
    echo 'GOVERNOR="performance"' > /etc/default/cpufrequtils
    systemctl restart cpufrequtils
    # Проверка:
    cpufreq-info | grep "policy"
    
  3. Huge Pages (Transparent Huge Pages — отключить для Java):

    echo never > /sys/kernel/mm/transparent_hugepage/enabled
    echo never > /sys/kernel/mm/transparent_hugepage/defrag
    # Чтобы сохранить после перезагрузки:
    cat <<EOF > /etc/systemd/system/disable-thp.service
    [Unit]
    Description=Disable Transparent Huge Pages
    DefaultDependencies=no
    After=local-fs.target
    
    [Service]
    Type=oneshot
    ExecStart=/bin/sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled && echo never > /sys/kernel/mm/transparent_hugepage/defrag'
    
    [Install]
    WantedBy=multi-user.target
    EOF
    systemctl enable disable-thp.service
    systemctl start disable-thp.service
    
  4. Лимиты файлов для пользователя minecraft:

    cat <<EOF >> /etc/security/limits.conf
    minecraft soft nofile 1000000
    minecraft hard nofile 1000000
    minecraft soft nproc 1000000
    minecraft hard nproc 1000000
    EOF
    

9. Мониторинг и автоматический рестарт (Systemd)

Создайте сервис для автозапуска и рестарта при краше:

  1. Создайте файл юнита:
    nano /etc/systemd/system/minecraft.service
    
  2. Содержимое (пути под свои):
    [Unit]
    Description=Minecraft Server (Paper)
    After=network.target
    
    [Service]
    WorkingDirectory=/opt/minecraft/server
    User=minecraft
    Group=minecraft
    # RestartSec=10 задержка перед рестартом
    Restart=on-failure
    RestartSec=10
    # Ограничение памяти (CGroup) — опционально, если нужно жесткое ограничение
    # MemoryMax=26G
    ExecStart=/opt/minecraft/server/start.sh
    ExecStop=/bin/bash -c 'echo "stop" | /usr