Как сменить версию Java для сервера
Подготовка и проверка текущего окружения
1. Подключение к серверу через SSH
Откройте терминал (Linux/macOS) или PowerShell (Windows) и подключитесь к выделенному серверу proxify.cloud:
ssh root@<IP_АДРЕС_ВАШЕГО_СЕРВЕРА>
IP-адрес и пароль root указаны в панели управления proxify.cloud на вкладке «Консоль» или в письме с данными доступа.
2. Проверка установленных версий Java
Выполните команду, чтобы увидеть все доступные альтернативы:
update-alternatives --list java
Типичный вывод на чистом Ubuntu 22.04/24.04:
/usr/lib/jvm/java-11-openjdk-amd64/bin/java
/usr/lib/jvm/java-17-openjdk-amd64/bin/java
/usr/lib/jvm/java-21-openjdk-amd64/bin/java
Если список пуст или нужной версии нет — переходите к разделу «Установка недостающей версии Java».
3. Определение требуемой версии для вашего сервера
| Версия Minecraft | Рекомендуемая Java |
|---|---|
| 1.16.5 и ниже | Java 8 (OpenJDK 8 / Zulu 8) |
| 1.17 — 1.18 | Java 16 / 17 |
| 1.19 — 1.20.4 | Java 17 |
| 1.20.5 — 1.21+ | Java 21 |
Проверьте версию ядра (Paper, Spigot, Fabric, Forge) в файле server.jar или в логах запуска.
Установка недостающей версии Java
4. Обновление списка пакетов
apt update && apt upgrade -y
5. Установка OpenJDK 8 (для старых версий)
В Ubuntu 22.04/24.04 пакет openjdk-8-jdk отсутствует в стандартном репозитории. Подключите репозиторий Azul Zulu (рекомендуется для производительности):
apt install -y gnupg2 software-properties-common
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0xB1998361219BD9C9
add-apt-repository "deb http://repos.azul.com/zulu/deb stable main"
apt update
apt install -y zulu8-jdk
6. Установка OpenJDK 17 / 21 (стандартные репозитории)
# Для Java 17
apt install -y openjdk-17-jdk
# Для Java 21 (Ubuntu 24.04+)
apt install -y openjdk-21-jdk
Если используете Ubuntu 22.04 и нужна Java 21, подключите репозиторий Azul аналогично шагу 5 и установите zulu21-jdk.
7. Проверка успешной установки
update-alternatives --list java
Должен появиться новый путь, например:
/usr/lib/jvm/zulu8-amd64/bin/java
/usr/lib/jvm/java-17-openjdk-amd64/bin/java
/usr/lib/jvm/java-21-openjdk-amd64/bin/java
Переключение версии Java глобально (system-wide)
8. Интерактивный выбор версии
update-alternatives --config java
Введите номер нужной строки и нажмите Enter. Проверьте:
java -version
9. Настройка JAVA_HOME (важно для скриптов запуска)
Откройте /etc/environment:
nano /etc/environment
Добавьте строку (путь берем из вывода шага 7, без /bin/java):
JAVA_HOME="/usr/lib/jvm/java-21-openjdk-amd64"
Сохраните (Ctrl+O, Enter) и выйдите (Ctrl+X). Примените:
source /etc/environment
echo $JAVA_HOME
Переключение версии Java только для конкретного сервера (Best Practice)
Рекомендуемый способ — не менять системную версию, а прописать полный путь к java в скрипте запуска. Это позволяет держать на одном сервере несколько инстансов на разных версиях Java.
10. Определение полного пути к нужной java
readlink -f $(which java)
# Или для конкретной версии:
ls /usr/lib/jvm/*/bin/java
Пример пути для Java 21: /usr/lib/jvm/java-21-openjdk-amd64/bin/java
11. Редактирование скрипта запуска
Обычно скрипт находится в папке сервера: /home/minecraft/server/start.sh или /opt/minecraft/start.sh.
cd /home/minecraft/server
nano start.sh
Замените строку запуска:
# Было:
java -Xms4G -Xmx4G -jar paper.jar nogui
# Стало (указываем абсолютный путь):
/usr/lib/jvm/java-21-openjdk-amd64/bin/java -Xms4G -Xmx4G -jar paper.jar nogui
Если используете screen или systemd — правите соответствующий файл (см. шаги 13-14).
12. Проверка прав на выполнение
chmod +x start.sh
Настройка автозапуска через systemd (производственный стандарт)
На выделенных серверах proxify.cloud рекомендуется использовать systemd для автозапуска после перезагрузки ноды Proxmox.
13. Создание unit-файла
nano /etc/systemd/system/minecraft.service
Содержимое (подставьте свои пути и пользователя):
[Unit]
Description=Minecraft Server (Paper 1.21)
After=network.target
[Service]
WorkingDirectory=/home/minecraft/server
User=minecraft
Group=minecraft
# Указываем конкретную Java версию:
ExecStart=/usr/lib/jvm/java-21-openjdk-amd64/bin/java -Xms4G -Xmx4G -jar paper.jar nogui
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal
# Лимиты для больших миров
LimitNOFILE=65535
LimitNPROC=65535
[Install]
WantedBy=multi-user.target
Создайте пользователя minecraft заранее: adduser --disabled-password --gecos "" minecraft и выдайте права на папку: chown -R minecraft:minecraft /home/minecraft/server.
14. Активация и запуск
systemctl daemon-reload
systemctl enable minecraft
systemctl start minecraft
systemctl status minecraft
Просмотр логов в реальном времени:
journalctl -u minecraft -f
Работа с панелью proxify.cloud (Proxmox VE)
15. Консоль и управление питанием
В панели proxify.cloud (Proxmox Web GUI):
- Выберите ваш узел (Node) → Ваш контейнер/VM (обычно CT для LXC или VM для KVM).
- Вкладка Console — полноценный TTY для работы, если SSH недоступен.
- Вкладка Summary → кнопки Shutdown / Reboot — используйте для грациозной перезагрузки после смены Java (systemd сам корректно остановит сервер при
systemctl reboot).
16. Бэкап перед изменениями (Snapshot)
Перед манипуляциями с Java сделайте снапшот:
- В Proxmox выберите VM/CT.
- Вкладка Backup → Snapshot → Take Snapshot.
- Введите имя:
pre-java-switch-21. - При проблеме — Rollback за 30 секунд.
Для LXC-контейнеров снапшоты работают мгновенно (thin-provisioning ZFS/CEPH на proxify.cloud).
Проверка работоспособности после смены версии
17. Тестовый запуск вручную
Остановите systemd-сервис и запустите вручную для чистого лога:
systemctl stop minecraft
cd /home/minecraft/server
sudo -u minecraft /usr/lib/jvm/java-21-openjdk-amd64/bin/java -Xms2G -Xmx2G -jar paper.jar nogui
Дождитесь строки Done (X.Xs)! For help, type "help". Остановите Ctrl+C.
18. Проверка версии в логах сервера
В latest.log найдите строку:
[Server thread/INFO]: Starting minecraft server version 1.21 (protocol 767)
[Server thread/INFO]: Java version: 21.0.3, vendor: Ubuntu
Версия Java в логе должна совпадать с целевой.
Возможные проблемы и решения
Проблема 1: UnsupportedClassVersionError при запуске
Симптом: java.lang.UnsupportedClassVersionError: net/minecraft/server/Main has been compiled by a more recent version of the Java Runtime
Причина: Ядро сервера новее установленной Java (например, Paper 1.21 на Java 17).
Решение: Установите Java 21 (шаги 5-6) и укажите полный путь в ExecStart или start.sh (шаги 11, 13).
Проблема 2: Error: Could not find or load main class @user_jvm_args.txt
Симптом: Ошибка при запуске Forge/Fabric с файлом аргументов.
Причина: Старые версии Java (8/11) некорректно парсят @file с BOM или кодировкой UTF-16.
Решение:
- Перекодируйте файл:
dos2unix user_jvm_args.txtилиsed -i '1s/^\xEF\xBB\xBF//' user_jvm_args.txt. - Либо обновите Java до 17/21, где баг исправлен.
Проблема 3: Сервер не стартует после ребута ноды Proxmox
Симптом: systemctl status minecraft показывает inactive (dead).
Причина: Unit-файл не включен (enabled) или сеть не поднята к моменту старта.
Решение:
systemctl enable minecraft
# Добавьте в [Unit] после network.target:
After=network-online.target
Wants=network-online.target
Выполните systemctl daemon-reload.
Проблема 4: java: command not found в скриптах / кроне
Причина: Переменная PATH в неинтерактивной сессии не содержит /usr/lib/jvm/.../bin.
Решение: Всегда используйте абсолютный путь /usr/lib/jvm/java-21-openjdk-amd64/bin/java в скриптах, systemd и cron. Не полагайтесь на update-alternatives для автоматизации.
Проблема 5: Высокое потребление памяти (OOM Killer)
Симптом: Процесс убит системой, в dmesg — Out of memory: Killed process.
Причина: `-Xmx
Комментарии (0)