Как уменьшить использование оперативной памяти
1. Анализ текущего потребления ресурсов
Перед оптимизацией определите, сколько памяти реально потребляет сервер и системные процессы.
- Подключитесь к выделенному серверу по SSH:
ssh root@<IP_ВАШЕГО_СЕРВЕРА_PROXIFY> - Проверьте общую статистику памяти:
Обратите внимание на столбцыfree -husedиavailable.availableпоказывает память, которую можно выделить приложениям без свопа. - Посмотрите потребление процесса Java (Minecraft):
Найдите PID и столбецps aux | grep javaRSS(Resident Set Size) — это реальная физическая память, занятая процессом. - В панели proxify.cloud (раздел «Консоль» или «Статистика» контейнера/VM) сверьтесь с графиками RAM Usage. Если график показывает 100% утилизации, а
free -hпоказывает свободную память — проблема в кэше файловой системы или неправильных лимитах контейнера (LXC).
2. Настройка JVM-флагов (Ключевой этап)
Неправильные флаги запуска — главная причина перерасхода памяти. Xmx задает только кучу (Heap), но Java использует также Metaspace, Code Cache, Thread Stacks, Direct Memory и нативные буферы (Netty, LWJGL).
2.1. Расчет лимитов
Для выделенного сервера на Ubuntu под Proxmox (proxify.cloud) оставьте 2–3 ГБ под ОС, кэш диска и системные сервисы (systemd, sshd, мониторинг).
- Если у сервера 16 ГБ RAM:
-Xmx12G— максимум. - Если 32 ГБ RAM:
-Xmx26G— максимум.
2.2. Рекомендуемые флаги для Paper / Purpur / Pufferfish (Java 17/21)
Откройте файл запуска. В панели proxify.cloud это обычно делается через «Файловый менеджер» в папке сервера (/home/container или /var/lib/minecraft), либо через SSH:
nano /home/container/start.sh
# или
nano /opt/minecraft/start.sh
Замените содержимое на оптимизированный набор (пример для 12 ГБ кучи):
#!/bin/bash
# Путь к Java (проверьте: which java)
JAVA_PATH="/usr/bin/java"
# Настройки памяти
HEAP="12G"
METASPACE="256M"
# Флаги JVM
JVM_FLAGS=(
"-Xms${HEAP}" "-Xmx${HEAP}"
"-XX:MaxMetaspaceSize=${METASPACE}"
"-XX:+UseG1GC"
"-XX:G1HeapRegionSize=16M"
"-XX:+UnlockExperimentalVMOptions"
"-XX:+ParallelRefProcEnabled"
"-XX:MaxGCPauseMillis=100"
"-XX:+DisableExplicitGC"
"-XX:+AlwaysPreTouch"
"-XX:G1NewSizePercent=30"
"-XX:G1MaxNewSizePercent=40"
"-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"
"-Dterminal.jline=false"
"-Dterminal.ansi=true"
"-Dlog4j2.formatMsgNoLookups=true"
"--add-modules=jdk.incubator.vector"
)
# Запуск
exec ${JAVA_PATH} "${JVM_FLAGS[@]}" -jar paper.jar --nogui
Важные параметры:
-Xms=-Xmx: предотвращает расширение кучи во время работы, снижая фрагментацию и накладные расходы.-XX:MaxMetaspaceSize: ограничивает память под метаданные классов (по умолчанию неограниченно, может съесть 1-2 ГБ на больших модпаках).-XX:+AlwaysPreTouch: заставляет ОС выделить физические страницы памяти при старте, уменьшая задержки (latency spikes) позже.-XX:+PerfDisableSharedMem: отключает файл/tmp/hsperfdata_<user>, экономит немного RAM и улучшает безопасность в контейнерах LXC.
2.3. Для Fabric / Forge (модпаки)
Добавьте флаги для уменьшения нативной памяти:
"-XX:MaxDirectMemorySize=2G"
"-Dio.netty.maxDirectMemory=2G"
Netty (сетевая библиотека) аллоцирует Direct Memory вне кучи. Без лимита она может уйти в OOM Killer.
3. Оптимизация конфигурации сервера (paper.yml / spigot.yml / bukkit.yml)
Правьте файлы в корне сервера через файловый менеджер proxify.cloud или nano.
3.1. paper.yml — наибольшее влияние
# paper.yml
settings:
# Уменьшает память на хранение чанков в очереди сохранения
chunk-task-interval: 200
# Отключает логирование спавна сущностей (экономит RAM на строках лога)
log-villager-deaths: false
log-named-deaths: false
# Настройки мобов — критично для RAM
mob-spawner-tick-rate: 2
prevent-moving-into-unloaded-chunks: true
max-entity-collisions: 2
# Кэширование
chunk-load-timeout: 30
chunk-unload-delay: 10s
keep-spawn-loaded: false
keep-spawn-loaded-range: 3
# Карты (map items) потребляют много памяти при большом количестве
map-item-limit: 256
# Контейнеры (сундуки, шалкеры) — оптимизация NBT
container-update-tick-rate: 1
hopper-transfer: 8
hopper-check: 1
hopper-amount: 1
# Настройки сохранения миров (редуцирует I/O и RAM буферы)
world-settings:
default:
save-structure-info: false
auto-save-interval: 6000 # 5 минут вместо стандартных 6000 тиков (5 мин), можно поставить 9000 (7.5 мин)
optimize-explosions: true
disable-chest-cat-detection: true
disable-creeper-lingering-effect: true
3.2. spigot.yml
# spigot.yml
settings:
save-user-cache-on-stop-only: true
user-cache-size: 500 # Уменьшите с 1000, если игроков мало
entity-activation-range:
animals: 16
monsters: 24
raiders: 48
misc: 8
water: 4
villagers: 16
flying-monsters: 48
# Ограничение тиков сущностей
entity-tracking-range:
players: 48
animals: 48
monsters: 48
misc: 32
other: 48
tick-inactive:
animals: true
monsters: true
villagers: true
3.3. bukkit.yml
# bukkit.yml
spawn-limits:
monsters: 50 # Стандарт 70
animals: 10 # Стандарт 10
water-animals: 5 # Стандарт 15
water-ambient: 2 # Стандарт 20
ambient: 1 # Стандарт 10
chunk-gc:
period-in-ticks: 400 # Чаще чистить неиспользуемые чанки
ticks-per:
animal-spawns: 400
monster-spawns: 1
water-spawns: 400
ambient-spawns: 400
4. Плагины для управления памятью
Установите только проверенные плагины. Избегайте «антилаг» плагинов, которые спавнят потоки.
Spark (профилирование и GC мониторинг) — обязателен.
# Скачайте в plugins/ wget -O plugins/Spark.jar https://ci.lucko.me/job/spark/lastSuccessfulBuild/artifact/spark-bukkit/build/libs/spark-*.jarКоманды в игре:
/spark memory,/spark gc,/spark heapdump(анализируйте дамп в VisualVM или Eclipse MAT).Chunky (предгенерация мира) — предотвращает лаги генерации, которые вызывают всплески RAM.
wget -O plugins/Chunky.jar https://github.com/pop4959/Chunky/releases/latest/download/Chunky-Spigot.jarВыполните предгенерацию:
/chunky radius 5000,/chunky start.FarmLimiter / MobFarmManager — жестко лимитируйте количество сущностей на чанк (например,
max: 20для мобов). Каждая сущность — это объект в куче + нативная память на физику.ClearLagg (только авто-очистка предметов на земле) — настройте
auto-clear-interval: 1800(30 мин). Не используйте его для очистки мобов — лучше FarmLimiter.
5. Настройка ОС Ubuntu (Host Level)
Выделенный сервер на proxify.cloud дает полный контроль над Ubuntu.
5.1. Swappiness
Запретите агрессивный свопинг (Java GC + Swap = смерть производительности).
echo "vm.swappiness=1" >> /etc/sysctl.d/99-minecraft.conf
sysctl --system
Проверьте: cat /proc/sys/vm/swappiness (должно быть 1).
5.2. Huge Pages (Transparent Huge Pages — THP)
Для Java лучше отключить THP, чтобы избежать задержек на дефрагментацию больших страниц.
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
# Сделать постоянным через systemd:
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
5.3. Лимиты для пользователя minecraft
Если сервер запускается не от root (что правильно), настройте limits.conf:
```
Комментарии (0)