Как установить spark для поиска лагов

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

  1. Авторизуйтесь в панели proxify.cloud.

  2. Перейдите в раздел Услуги → Мои серверы и выберите нужный выделенный сервер (Dedicated Server).

  3. Откройте вкладку Консоль (VNC/NoVNC) или используйте SSH-ключ, добавленный при заказе. Для работы с Ubuntu удобнее подключиться через терминал:

    ssh root@<IP_ВАШЕГО_СЕРВЕРА>
    

    IP-адрес указан в деталях услуги в панели proxify.cloud.

  4. Обновите пакеты и установите необходимые утилиты:

    apt update && apt upgrade -y
    apt install -y wget curl screen htop openjdk-21-jre-headless
    

    Spark требует Java 17 или 21. На современных версиях Paper/Purpur/Folia используйте Java 21.

2. Определение пути к серверу и пользователя

На выделенных серверах proxify.cloud файлы обычно размещаются в домашней директории пользователя или в /opt. Стандартная практика — запуск от отдельного пользователя minecraft для безопасности.

  1. Проверьте, существует ли пользователь:

    id minecraft &>/dev/null || useradd -m -s /bin/bash minecraft
    
  2. Определите рабочую директорию сервера. Типичные пути:

    • /home/minecraft/server
    • /opt/minecraft/server
    • /var/lib/minecraft/server

    Перейдите в неё (пример для /home/minecraft/server):

    cd /home/minecraft/server
    # Если директории нет, создайте и назначьте права:
    mkdir -p /home/minecraft/server
    chown -R minecraft:minecraft /home/minecraft/server
    

3. Установка Spark как мода/плагина

Способ установки зависит от типа ядра сервера.

Вариант А: Paper / Purpur / Airplane / Folia (Плагин)

Это самый частый сценарий на хостинге proxify.cloud.

  1. Переключитесь на пользователя minecraft:

    su - minecraft
    cd /home/minecraft/server
    
  2. Скачайте последнюю версию Spark для вашей версии ядра (API Paper). Используйте официальный API или прямой 링к с GitHub/CurseForge. Пример для последней стабильной версии (замените версию при необходимости):

    wget -O plugins/spark.jar "https://spark.lucko.me/versions/latest/download?platform=paper"
    

    Проверьте версию ядра командой java -jar paper-*.jar --version перед скачиванием, чтобы совпадали мажорные версии (1.20.x, 1.21.x).

  3. Убедитесь, что файл скачался корректно:

    ls -lh plugins/spark.jar
    

Вариант Б: Forge / Fabric / NeoForge (Мод)

Если сервер работает на модлоадере.

  1. Определите папку mods (обычно рядом с server.jar).
  2. Скачайте мод Spark под соответствующий модлоадер и версию Minecraft:
    # Пример для Fabric 1.20.1 (замените URL на актуальный с https://modrinth.com/mod/spark/versions)
    wget -O mods/spark.jar "https://cdn.modrinth.com/data/.../spark-<version>.jar"
    
    Лучше скачать конкретную версию через браузер на ПК и загрузить через SFTP (FileZilla/WinSCP), используя учетные данные root или minecraft панели proxify.cloud, чтобы не ошибиться с версией.

Вариант В: Vanilla / Spigot (Без поддержки плагинов/модов)

Spark не работает на чистом Vanilla или старом Spigot без поддержки Paper API. Мигрируйте на Paper/Purpur.

4. Базовая конфигурация (config.yml)

После первого запуска сервера с плагином/модом сгенерируется конфиг.

  1. Запустите сервер один раз (в screen/tmux), чтобы создались файлы, затем остановите командой stop.

    screen -S mc java -Xms4G -Xmx4G -jar paper-*.jar nogui
    # Ждите "Done!", вводите stop, нажимаете Enter.
    
  2. Откройте конфиг:

    nano plugins/spark/config.yml
    

    (Для модов: mods/spark/config.yml или config/spark.cfg в зависимости от версии).

  3. Ключевые параметры для правки:

    # Включить веб-интерфейс (рекомендуется)
    web:
      enabled: true
      address: "0.0.0.0"  # Слушает все интерфейсы
      port: 8123          # Порт веб-UI
      # ВАЖНО: На выделенном сервере proxify.cloud настройте фаервол (см. шаг 6)
    
    # Сбор данных (профилирование)
    profiler:
      # Автоматически начинать профилирование при высокой нагрузке (TPS < 18)
      enabled: true
      trigger:
        enabled: true
        threshold: 18.0
        duration: 300  # секунд (5 минут)
    
    # Ограничение доступа к командам (только OP)
    command-permission: "spark.command"
    
  4. Сохраните (Ctrl+O, Enter, Ctrl+X).

5. Настройка Systemd для автозапуска (Рекомендуется на Ubuntu)

Вместо screen вручную используйте systemd-сервис. Это стандарт для выделенных серверов proxify.cloud.

  1. Выйдите из пользователя minecraft (exit или Ctrl+D), вернитесь к root.

  2. Создайте юнит-файл:

    nano /etc/systemd/system/minecraft.service
    
  3. Вставьте конфигурацию (подправьте пути, версию Java, объем RAM):

    [Unit]
    Description=Minecraft Server (Paper) with Spark
    After=network.target
    Wants=network.target
    
    [Service]
    WorkingDirectory=/home/minecraft/server
    User=minecraft
    Group=minecraft
    
    # Путь к Java 21 (проверьте: readlink -f $(which java))
    Environment="JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64"
    ExecStart=/usr/lib/jvm/java-21-openjdk-amd64/bin/java \
      -Xms4G -Xmx4G \
      -XX:+UseG1GC -XX:+ParallelRefProcEnabled \
      -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions \
      -XX:+DisableExplicitGC -XX:+AlwaysPreTouch \
      -jar paper-1.21.1-*.jar nogui
    
    # Перезапуск при краше
    Restart=on-failure
    RestartSec=10
    StartLimitInterval=60
    StartLimitBurst=3
    
    # Логи в journald
    StandardOutput=journal
    StandardError=journal
    SyslogIdentifier=minecraft
    
    [Install]
    WantedBy=multi-user.target
    

    Замените paper-1.21.1-*.jar на точное имя вашего файла ядра (ls /home/minecraft/server).

  4. Перезагрузите демон, включите автозапуск и стартуйте:

    systemctl daemon-reload
    systemctl enable minecraft
    systemctl start minecraft
    
  5. Проверьте статус и логи:

    systemctl status minecraft
    journalctl -u minecraft -f -n 100
    

6. Настройка сетевого доступа (Фаервол UFW)

Панель proxify.cloud не блокирует порты на уровне гипервизора (Proxmox) для выделенных серверов, управление ОС полностью за вами. По умолчанию Ubuntu может иметь закрытый UFW.

  1. Проверьте статус:
    ufw status
    
  2. Откройте порт игры (по умолчанию 25565) и порт веб-интерфейса Spark (8123):
    ufw allow 25565/tcp comment "Minecraft Game Port"
    ufw allow 8123/tcp comment "Spark Web UI"
    # Если используете SSH на нестандартном порту — откройте его тоже!
    ufw allow 22/tcp comment "SSH"
    ufw enable
    
    Если у вас стоит iptables/nftables напрямую — добавьте правила туда. Для Cloudflare Tunnel или Nginx Proxy Manager откройте 8123 только для localhost (127.0.0.1) и настройте реверс-прокси.

7. Использование Spark: поиск лагов

После запуска сервера (systemctl start minecraft) и входа в игру.

Через команды в консоли/игре (требует OP/permission spark.command)

  1. Быстрый профиль (10 сек):

    /spark profiler start --timeout 10
    
  2. Открыть отчет в браузере: После завершения в чате/консоли появится ссылка вида:

    [Spark] View the report at: https://spark.lucko.me/report/xxxxxxxx
    

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

  3. Профилирование Tick'а (для зависаний):

    /spark profiler tick
    

    Анализирует один игровой тик детально.

  4. Просмотр текущей нагрузки (CPU/Heap/Threads):

    /spark health
    /spark memory
    /spark threads
    

Через Веб-интерфейс (Local Web UI)

Если включен web.enabled: true и порт 8123 открыт в UFW:

  1. Откройте браузер: http://<IP_ВАШЕГО_СЕРВЕРА_PROXIFY>:8123
  2. Интерфейс показывает:
    • Dashboard: TPS, CPU, RAM, GC графики в реальном времени.
    • Profiler: Кнопка "Start Profiler" (запуск профилирования на 1-5 минут).
    • Reports: История сохраненных отчетов (хранятся в plugins/spark/reports).
    • Threads: Дампы потоков (Thread Dumps) для поиска зависаний (deadlocks).

8. Анализ отчета (Что искать)

Откройте отчет (веб-ссылка или Local UI). Ключевые вкладки:

  1. Call Graph (Flame Graph): Визуализация стека вызовов.
    • Широкие плашки сверху = код, занимающий больше всего CPU времени.
    • Ищите плагины/моды с большими блоками: com.example.plugin..., net.minecraft....
  2. Timings (Timings Viewer): Классическое дерево.timings.
    • Сравнивайте Total Time и Count.