Как уменьшить нагрузку на процессор
1. Анализ текущей нагрузки и сбор базовых метрик
Перед внесением изменений зафиксируйте текущее состояние. В панели proxify.cloud (Proxmox VE) перейдите в узел (Node) → Summary. Запишите средние значения CPU Usage за последние 24 часа и пиковые значения.
На самом сервере (через SSH) выполните:
# Установка утилит мониторинга
apt update && apt install -y htop iotop sysstat jq
# Запуск сбора статистики в фоне (соберет данные за 5 минут)
sar -u 1 300 -o /tmp/cpu_load.sar &
Подключитесь к консоли сервера Minecraft (screen/tmux) и введите команду для профиля:
# В консоли сервера (Paper/Purpur)
timings on
# Подождите 3-5 минут при онлайне
timings paste
Ссылка на отчет Timings покажет, какие плагины/таски потребляют больше всего тиков (ms/tick). Сохраните ссылку.
2. Оптимизация JVM-флагов (файл запуска)
На выделенном сервере с Ubuntu файл запуска обычно лежит в /home/minecraft/start.sh или /opt/minecraft/start.sh. Откройте его:
nano /home/minecraft/start.sh
Замените стандартные флаги на оптимизированные для Paper/Purpur (Java 21, G1GC/ZGC). Пример для 32 ГБ RAM (выделите 70-80% под кучу, остальное — Metaspace, CodeCache, OS):
#!/bin/bash
JAVA_EXEC="/usr/bin/java"
JAR_FILE="paper-1.21.1.jar"
RAM_TOTAL_GB=32
HEAP_GB=$((RAM_TOTAL_GB * 75 / 100)) # 24G
# Флаги для Java 21 (ZGC — лучший выбор для низкой задержки на больших кучах)
JVM_FLAGS="
-Xms${HEAP_GB}G -Xmx${HEAP_GB}G
-Z:+ZGenerational
-XX:+UnlockExperimentalVMOptions
-XX:+UseZGC
-XX:SoftMaxHeapSize=${HEAP_GB}G
-XX:MaxRAMPercentage=75
-XX:InitialRAMPercentage=75
-XX:+AlwaysPreTouch
-XX:+DisableExplicitGC
-XX:+ParallelRefProcEnabled
-XX:+PerfDisableSharedMem
-XX:MaxInlineLevel=18
-XX:MaxTrivialSize=12
-Dterminal.jline=false
-Dterminal.ansi=true
-Dfile.encoding=UTF-8
-Dsun.stdout.encoding=UTF-8
-Dsun.stderr.encoding=UTF-8
"
$JAVA_EXEC $JVM_FLAGS -jar $JAR_FILE --nogui
Важно: Если RAM < 16 ГБ, используйте G1GC вместо ZGC:
-XX:+UseG1GC -XX:G1HeapRegionSize=8M -XX:+UnlockExperimentalVMOptions -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapWastePercent=5 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=50
Сделайте файл исполняемым и перезапустите сервер:
chmod +x /home/minecraft/start.sh
systemctl restart minecraft # если используется systemd
# или через screen вручную
В панели proxify.cloud проверьте график CPU после рестарта — пики GC (Garbage Collection) должны стать ровнее.
3. Настройка paper-global.yml — глобальные тормоза
Файл: /home/minecraft/paper-global.yml (создается при первом запуске Paper/Purpur). Откройте и примените следующие значения (только измененные параметры):
# /home/minecraft/paper-global.yml
settings:
# Отключаем обработку пустых чанков при сохранении
save-empty-scoreboard-teams: false
# Уменьшаем частоту сохранения данных игроков (раз в 30 мин вместо дефолтных)
player-auto-save-rate: 3600
# Оптимизация поиска путей (критично для мобофармов)
pathfinding-max-dist: 24
# Отключаем лишние проверки коллизий
use-faster-eigencraft-redstone: true
# Обновление сенсоров мобов реже
mob-spawner-tick-rate: 2
# Лимит сущностей в чанке (жесткий кап)
entity-per-chunk-save-limit:
experience_orb: 16
item: 32
# Отключаем телеметрию Moang (не влияет на геймплей)
moang-bugfix: true
# Исправление дуп-багов без нагрузки
fix-items-merging-through-walls: true
Перезапуск не обязателен, достаточно /paper reload в консоли, но лучше полный рестарт.
4. Настройка paper-world.yml — настройки мира
Файл: /home/minecraft/worlds/world/paper-world.yml (для каждого мира). Ключевые параметры для CPU:
# /home/minecraft/worlds/world/paper-world.yml
settings:
# Частота спавна мобов (тиков). 1 = каждый тик (дефолт), 2 = раз в 2 тика. Ставьте 2-4.
mob-spawn-tick-rate: 2
# Деспавн мобов дальше 128 блоков (дефолт), уменьшаем до 96 для экономии тиков на AI
despawn-ranges:
soft: 80
hard: 96
# Оптимизация хопперов (главные пожиратели CPU в технических серверах)
hopper:
disable-move-event: true # Отключает событие InventoryMoveItemEvent для хопперов
ignore-occluding-blocks: true # Хопперы не проверяют блоки сверху
cooldown-when-full: true # Пауза если инвентарь полон
# Контейнеры: отключаем обновление клиентов при закрытии
container-update-tick-rate: 4
# Дроп предметов: объединяем быстрее
item-despawn-rate: 300 # 5 минут вместо 5 минут (дефолт 6000 тиков = 5 мин, тут в тиках? нет, в тиках дефолт 6000. Ставим 3000 = 2.5 мин)
item-merge-radius: 3.5 # Радиус слияния дропа (дефолт 2.5)
# Arrow despawn
arrow-despawn-rate: 600
# ТНТ оптимизация
tnt-entity-height-nerf: true
# Парсинг команд блоков
command-block-tick-rate: 2
Пояснение по хопперам: disable-move-event: true ломает некоторые плагины логгирования (CoreProtect, Prism), но дает +15-30% CPU на тех. серверах. Если нужны логи — поставьте false, но добавьте плагин HopperOptimizer или FastHopper.
5. Настройка spigot.yml — классика оптимизации
Файл: /home/minecraft/spigot.yml.
# /home/minecraft/spigot.yml
settings:
# Сохранение структур (end cities, villages) — отключаем лишние проверки
save-structure-info: false
# Лимит сущностей (глобальный)
entity-activation-range:
animals: 16
monsters: 24
raiders: 48
misc: 8
water: 8
villagers: 16
flying-monsters: 48
# Тики сущностей вне радиуса активации
entity-tracking-range:
players: 48
animals: 48
monsters: 48
misc: 32
other: 64
# Обновление чанков (view-distance ниже в server.properties)
chunks-per-tick: 650
# Автосохранение мира
auto-save-interval: 6000 # 5 минут (дефолт 900 = 45 сек). Меньше дисковые IO, меньше лагов спайка.
# Лимит тиков на задачу (watchdog)
max-tick-time:
tile: 1000
entity: 1000
6. Настройка bukkit.yml — спавн и тики
Файл: /home/minecraft/bukkit.yml.
# /home/minecraft/bukkit.yml
spawn-limits:
monsters: 50 # Дефолт 70
animals: 8 # Дефолт 10
water-animals: 3 # Дефолт 5
water-ambient: 1 # Дефолт 2
ambient: 1 # Дефолт 10
axolotls: 3
category:
monster: 50
animal: 8
water_creature: 3
water_ambient: 1
ambient: 1
axolotls: 3
chunk-gc:
period-in-ticks: 400 # Очистка неиспользуемых чанков из памяти чаще (дефолт 600)
ticks-per:
animal-spawns: 400 # Дефолт 400
monster-spawns: 2 # Дефолт 1 (каждый тик). Ставим 2-4.
water-spawns: 400
water-ambient-spawns: 400
ambient-spawns: 400
axolotl-spawns: 400
autosave: 6000 # Синхронно с spigot.yml
7. Настройка server.properties — сетевой слой и дистанция
Файл: /home/minecraft/server.properties.
# /home/minecraft/server.properties
# Сетевой движок (Paper использует Netty, но настройки важны)
network-compression-threshold=256
# Дистанция прорисовки (ГЛАВНЫЙ ФАКТОР CPU). Для выделенки 6-8. Не ставьте 10+.
view-distance=6
simulation-distance=5
# Макс. тиков в секунду (не меняйте)
max-tick-time=60000
# Отключаем спавн NPC если не нужно
spawn-npcs=false
# Отключаем анонс достижений в чат (мелочь, но чисто)
announce-player-achievements=false
# Режим онлайн (true для лицензии)
online-mode=true
# Макс. игроков (реалистично под железо)
max-players=80
# Использовать нативный транспорт (epoll/kqueue) — ОБЯЗАТЕЛЬНО для Linux
use-native-transport=true
Про view-distance: Каждый чанк в радиусе 6 — это ~113 чанков на игрока.
Комментарии (0)