Как оптимизировать сервер Fabric

1. Подготовка окружения на выделенном сервере proxify.cloud

Перед настройкой самого игрового сервера необходимо оптимизировать операционную систему Ubuntu. Все действия выполняются через SSH (доступ к консоли сервера есть в панели proxify.cloud во вкладке «Консоль» или по IP-адресу).

  1. Обновите пакеты и установите базовые утилиты:

    apt update && apt upgrade -y
    apt install -y htop iotop net-tools curl wget git openjdk-21-jdk-headless
    

    Fabric 1.20.4+ требует Java 21. Проверьте версией: java -version.

  2. Настройте лимиты открытых файлов (важно для больших миров и плагинов):

    cat <<EOF >> /etc/security/limits.conf
    * soft nofile 1000000
    * hard nofile 1000000
    root soft nofile 1000000
    root hard nofile 1000000
    EOF
    

    Добавьте в /etc/pam.d/common-session:

    echo "session required pam_limits.so" >> /etc/pam.d/common-session
    
  3. Отключите swap (на выделенном сервере с достаточным RAM это снижает лаги):

    swapoff -a
    sed -i '/swap/d' /etc/fstab
    
  4. Настройте sysctl для сетевого стека и памяти (создайте /etc/sysctl.d/99-minecraft.conf):

    cat <<EOF > /etc/sysctl.d/99-minecraft.conf
    net.core.somaxconn = 1024
    net.ipv4.tcp_fastopen = 3
    net.ipv4.tcp_tw_reuse = 1
    vm.swappiness = 1
    vm.dirty_ratio = 10
    vm.dirty_background_ratio = 5
    EOF
    sysctl --system
    
  5. Перезагрузите сервер через панель proxify.cloud (кнопка «Reboot») или командой reboot, чтобы применить лимиты и sysctl.

2. Выбор и настройка Java-рантайма

Для Fabric рекомендуется Eclipse Temurin или Azul Zulu (сборки OpenJDK с оптимизациями). Установим Temurin 21:

  1. Добавьте репозиторий и установите:

    apt install -y gpg
    mkdir -p /etc/apt/keyrings
    wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor > /etc/apt/keyrings/adoptium.gpg
    echo "deb [signed-by=/etc/apt/keyrings/adoptium.gpg] https://packages.adoptium.net/artifactory/deb jammy main" > /etc/apt/sources.list.d/adoptium.list
    apt update && apt install -y temurin-21-jdk
    
  2. Установите дефолтный Java:

    update-alternatives --config java
    # Выберите Temurin 21
    

3. Установка Fabric Server

Создайте отдельного пользователя для безопасности (не запускайте от root):

  1. Создайте пользователя и директорию:

    adduser --disabled-password --gecos "" mcuser
    su - mcuser
    mkdir -p ~/server && cd ~/server
    
  2. Скачайте установщик Fabric (замените версию на актуальную, например 1.20.6):

    FABRIC_VERSION=1.20.6
    INSTALLER_VERSION=0.11.2
    LOADER_VERSION=0.16.9
    wget "https://maven.fabricmc.net/net/fabricmc/fabric-installer/${INSTALLER_VERSION}/fabric-installer-${INSTALLER_VERSION}.jar" -O fabric-installer.jar
    java -jar fabric-installer.jar server -mcversion ${FABRIC_VERSION} -loader ${LOADER_VERSION} -downloadMinecraft
    

    Файл fabric-server-launch.jar — это точка входа. server.jar (vanilla) остается рядом.

  3. Примите EULA:

    echo "eula=true" > eula.txt
    

4. Оптимизация JVM-флагов (файл start.sh)

Создайте скрипт запуска с профессиональными флагами для G1GC/ZGC. Для 16-32 ГБ RAM лучше G1, для 32+ ГБ — ZGC.

  1. Создайте start.sh:

    cat <<'EOF' > start.sh
    #!/bin/bash
    # Настройки памяти (пример для 24 ГБ выделенных серверу из 32 ГБ)
    HEAP="-Xms20G -Xmx20G"
    
    # Метаспейс (моды грузят много классов)
    METASPACE="-XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=2g"
    
    # GC: G1GC для куч < 32G, ZGC для > 32G
    GC_FLAGS="-XX:+UseG1GC
    -XX:+ParallelRefProcEnabled
    -XX:MaxGCPauseMillis=50
    -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"
    
    # Диагностика (логи GC в файл для анализа)
    GC_LOG="-Xlog:gc*:logs/gc.log:time,uptime,level,tags:filecount=5,filesize=10m"
    
    # Агент для таймингов (Spark, WarmUp) - раскомментируйте при необходимости
    # AGENT="-javaagent:plugins/spark.jar"
    
    JAVA_OPTS="${HEAP} ${METASPACE} ${GC_FLAGS} ${GC_LOG} ${AGENT}"
    
    echo "Starting server with: ${JAVA_OPTS}"
    java ${JAVA_OPTS} -jar fabric-server-launch.jar nogui
    EOF
    chmod +x start.sh
    
  2. Создайте директорию для логов GC:

    mkdir -p logs
    
  3. Запустите один раз для генерации конфигов:

    ./start.sh
    # Дождитесь "Done!", введите stop
    

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

Отредактируйте server.properties для производительности:

cat <<EOF > server.properties
# Сеть
network-compression-threshold=256
max-tick-time=60000
enable-status=true
enable-query=false

# Мир
view-distance=6
simulation-distance=5
max-chained-neighbor-updates=1000000
max-auto-save-chunks-per-tick=8
optimize-explosion-raycasts=true

# Энтити
entity-broadcast-range-percentage=80
entity-tracking-range-players=48
entity-tracking-range-animals=48
entity-tracking-range-monsters=48
entity-tracking-range-misc=32
entity-tracking-range-other=64

# Спавн
spawn-protection=0
max-players=100
spawn-monsters=true
spawn-animals=true
spawn-npcs=true

# Прочее
use-native-transport=true
sync-chunk-writes=true
region-file-compression=zstd
EOF

Параметры view-distance и simulation-distance — главные регуляторы нагрузки. Для PvP ставьте 6/5, для выживания с модами можно 8/6.

6. Установка обязательных модов для оптимизации (server-side)

Положите .jar файлы в папку mods/. Скачивайте через wget с Modrinth/GitHub Releases (версии под вашу версию MC + Fabric).

  1. Lithium — оптимизация игровой логики (физика, ИИ, блоки) без изменения ванильного поведения.
  2. Starlight — переписанный движок света (в 10-50 раз быстрее ванильного).
  3. FerriteCore — снижение потребления RAM (компактизация данных моделей/состояний).
  4. Krypton — оптимизация сетевого стека и криптографии.
  5. Alternate Current — быстрый расчет редстоуна.
  6. C2ME (Chunk Cache & Memory Enhancements) — кэширование чанков, ускорение генерации.
  7. Entity Culling (серверная часть) — не отправляет пакеты за невидимыми энтити.
  8. ModernFix — критически важен для модпаков: ускоряет загрузку, чинит утечки памяти, оптимизирует микшеры.

Пример скачивания (замените URL на актуальные):

mkdir -p mods
cd mods
# Пример для 1.20.6 (проверьте актуальные версии на modrinth.com)
wget "https://cdn.modrinth.com/data/.../lithium-fabric-0.11.0.jar" -O lithium.jar
wget "https://cdn.modrinth.com/data/.../starlight-1.0.0.jar" -O starlight.jar
wget "https://cdn.modrinth.com/data/.../ferritecore-6.0.0.jar" -O ferritecore.jar
wget "https://cdn.modrinth.com/data/.../krypton-0.3.0.jar" -O krypton.jar
wget "https://cdn.modrinth.com/data/.../alternatecurrent-2.0.0.jar" -O alternatecurrent.jar
wget "https://cdn.modrinth.com/data/.../c2me-0.2.0.jar" -O c2me.jar
wget "https://cdn.modrinth.com/data/.../modernfix-5.18.0.jar" -O modernfix.jar
cd ..

Важно: После добавления модов удалите папки world, world_nether, world_the_end (если это новый сервер) или запустите с флагом --forceUpgrade один раз для пересчета света Starlight:

java -jar fabric-server-launch.jar --forceUpgrade nogui

7. Конфигурация модов (файлы в config/)

Создайте/отредактируйте ключевые конфиги для максимального эффекта.

  1. Lithium (config/lithium.properties):

    # Отключайте, если есть конфликты с другими модами ИИ
    optimizeEntityAID=true
    optimizeBlockTick=true
    optimizeExplosions=true
    optimizeHopper=true
    
  2. FerriteCore (`config/