Как увеличить объём оперативной памяти серверу
1. Оценка текущих ресурсов и планирование
Перед изменением конфигурации определите, сколько памяти физически доступно на выделенном сервере и сколько уже используется.
- Подключитесь к серверу по SSH:
ssh root@<IP-адрес_сервера> - Проверьте общее количество ОЗУ и доступное:
Пример вывода:free -htotal used free shared buff/cache available Mem: 62Gi 4.5Gi 52Gi 1.2Gi 5.8Gi 55Gi Swap: 4.0Gi 0B 4.0Gi - Определите, какой объём можно выделить Minecraft. Рекомендуется оставлять 2–4 ГБ под систему и буферы. Если на сервере 64 ГБ, безопасно выделить 58–60 ГБ под Java-процесс.
2. Остановка игрового сервера
Никогда не меняйте параметры запуска на работающем сервере — это приведёт к потере данных или критическому лагу.
- Если сервер запущен через systemd (стандарт для proxify.cloud):
Имя юнита может отличаться:systemctl stop minecraftmc-server,paper,fabric. Уточните командойsystemctl list-units | grep -i mine. - Если сервер запущен в
screenилиtmuxвручную:
Подождите 10–15 секунд до полной остановки процесса.screen -S mc -X stuff "stop$(printf '\r')"
3. Редактирование параметров запуска (systemd)
На выделенных серверах proxify.cloud чаще всего используется systemd для автозапуска и управления памятью.
- Откройте юнит-файл:
Заменитеsystemctl edit --full minecraftminecraftна реальное имя сервиса. - Найдите секцию
[Service]и директивуExecStart. Она выглядит примерно так:ExecStart=/usr/bin/java -Xms4G -Xmx4G -jar /opt/minecraft/server.jar nogui - Измените флаги
-Xms(начальная куча) и-Xmx(максимальная куча) на нужные значения. Например, для 32 ГБ:
Важно:ExecStart=/usr/bin/java -Xms32G -Xmx32G -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 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -jar /opt/minecraft/server.jar nogui-Xmsи-Xmxдолжны быть равны (фиксированная куча) — это снижает фрагментацию и паузы GC.- Используйте суффиксы
GилиM(гигабайты/мегабайты). - Флаги G1GC выше — рекомендуемые настройки для Paper/Spigot/Purpur на больших кучах (>12 ГБ).
- Сохраните файл (в редакторе nano:
Ctrl+O,Enter,Ctrl+X). - Перезагрузите конфигурацию systemd:
systemctl daemon-reload
4. Редактирование скрипта запуска (ручной запуск / panel-скрипты)
Если на сервере используется кастомный скрипт запуска (например, start.sh) или панель управления (Pterodactyl, PufferPanel), правьте его.
- Найдите скрипт. Типичные пути:
/opt/minecraft/start.sh/home/minecraft/start.sh/var/lib/pterodactyl/volumes/<uuid>/start.sh(если стоит Pterodactyl на proxify.cloud)
- Откройте для редактирования:
nano /opt/minecraft/start.sh - Найдите строку с
java -Xms... -Xmx...и замените значения:#!/bin/bash JAVA_ARGS="-Xms32G -Xmx32G -XX:+UseG1GC ... (остальные флаги) ..." java $JAVA_ARGS -jar paper-1.20.4.jar nogui - Сделайте скрипт исполняемым (на случай сброса прав):
chmod +x /opt/minecraft/start.sh chown minecraft:minecraft /opt/minecraft/start.sh
5. Настройка JVM для больших куч (Transparent Huge Pages и Swap)
На Ubuntu в proxify.cloud по умолчанию могут быть включены Transparent Huge Pages (THP), что вызывает задержки при аллокации памяти >16 ГБ.
- Проверьте статус THP:
Выводcat /sys/kernel/mm/transparent_hugepage/enabled[always] madvise neverозначает, что THP включен. - Отключите THP навсегда через systemd-tmpfiles или grub. Самый надёжный способ — через grub:
Добавьтеnano /etc/default/grubtransparent_hugepage=neverвGRUB_CMDLINE_LINUX_DEFAULT:GRUB_CMDLINE_LINUX_DEFAULT="quiet transparent_hugepage=never" - Обновите grub и перезагрузите сервер (планируйте ребут в окне обслуживания):
Если ребут невозможен прямо сейчас, отключите временно до ребута:update-grub rebootecho never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag - Настройте
vm.swappinessдля минимизации свопирования Java-кучи:echo 'vm.swappiness=1' >> /etc/sysctl.d/99-minecraft.conf sysctl --system
6. Проверка лимитов пользователя (ulimits)
Процесс Java не сможет зааллоцировать память, если стоит жесткий лимит memlock или as.
- Проверьте текущие лимиты для пользователя
minecraft:su - minecraft -c "ulimit -a" - Если
max memory sizeилиvirtual memoryнеunlimited, отредактируйте/etc/security/limits.conf:
Добавьте в конец:nano /etc/security/limits.confminecraft soft memlock unlimited minecraft hard memlock unlimited minecraft soft nofile 1048576 minecraft hard nofile 1048576 - Убедитесь, что PAM загружает лимиты. В
/etc/pam.d/common-sessionи/etc/pam.d/common-session-noninteractiveдолжна быть строка:session required pam_limits.so
7. Запуск сервера и верификация
- Запустите сервер:
systemctl start minecraft # или systemctl start mc-server - Следите за логами в реальном времени:
journalctl -u minecraft -f # или для ручного запуска tail -f /opt/minecraft/logs/latest.log - После загрузки мира (в логе появится
Done (X.Xs)! For help, type "help") проверьте реальное потребление памяти:
Обратите внимание на столбецps aux | grep java | grep -v grepRSS(Resident Set Size) — он должен соответствовать вашему-Xmx(с небольшим оверхедом 1-2 ГБ на Metaspace, Code Cache, Direct Memory). - Зайдите в игру и выполните команду
/gc(есть в Paper/Purpur) или посмотрите Timings (/timings on,/timings paste). Убедитесь, что GC паузы не превышают 50-100 мс.
8. Корректировка конфигураций сервера под новую память
Увеличение кучи требует пересмотра настроек в paper.yml, spigot.yml, bukkit.yml, иначе вы не получите прироста производительности.
paper.yml (ключевые параметры):
# Увеличьте лимит сущностей для обработки за тик, если их много
max-auto-save-chunks-per-tick: 24
# Оптимизация чанков
chunk-loading:
enabled: true
# Настройки сохранения
save-user-cache-on-stop-only: true
# Mob spawning — увеличьте лимиты, если фермы ломаются
spawner:
spawn-limits:
ambient: 15
axolotls: 5
creature: 25
monster: 70
underground_water_creature: 5
water_ambient: 20
water_creature: 10
bukkit.yml:
spawn-limits:
monsters: 70
animals: 15
water-animals: 5
water-ambient: 20
axolotls: 5
chunk-gc:
period-in-ticks: 400
spigot.yml:
save-user-cache-on-stop-only: true
entity-activation-range:
animals: 32
monsters: 32
raiders: 48
misc: 16
water: 8
villagers: 16
flying-monsters: 48
tick-inactive-villagers: false
nerf-spawner-mobs: true
Примените изменения: /reload в игре или перезапуск сервера.
9. Мониторинг в панели proxify.cloud
После изменений зайдите в панель управления proxify.cloud (Proxmox VE).
- Выберите ваш выделенный сервер (Node) в дереве слева.
- Перейдите во вкладку Summary (Сводка).
- Наблюдайте за графиком Memory Usage (RAM).
- Линия
Usedдолжна стабилизироваться на уровне-Xmx+ ~2 ГБ системные нужды. - Не должно быть роста
Swap Used. Если своп растёт — уменьшите-Xmxили добавьте ОЗУ.
- Линия
- При необходимости настройте алерты: Datacenter -> Notifications -> Add -> Metric:
memory, Threshold:90%.
Возможные проблемы и решения
1. Сервер не запускается: "Could not reserve enough space for object heap"
Причина: Запрошено больше памяти,
Комментарии (0)